2016-04-13 25 views
-3

Sadece çıkış verilerinin c dilinde nasıl ayrılacağını öğrenmek istiyorum, veri kodum makine kodu verileri olarak tanımlandı, 4 bayt için WORD komutunu kullandım.c dilinde ayrı çıkış verisi

 E3A00001  MOV r0,#1 
     E3A01002  MOV r1,#2 
     E0802001  ADD r2,r0,r1 
     E2822005  ADD r2,r2,#5 

Ve hiç böylesine onları ayırmak istiyorum:

 typedef uint32_t REGISTER;  // registers are 32 bits 
     typedef uint32_t WORD;   // words are 32 bits 
     typedef uint8_t BYTE;    // bytes are 8 bits 

benim dışarı koymak olduğunu

 E3 A0 00 01  MOV r0,#1 
     E3 A0 10 02  MOV r1,#2 
     E0 80 20 01  ADD r2,r0,r1 
     E2 82 20 05  ADD r2,r2,#5 
+2

Bir assembler geliştiricisi ve bunun hakkında soru soruyorsunuz? –

+0

@MartinJames haklısın. Aslında bununla kafam karıştı, birçok yönden denedim ama benim için işe yaramadı. – Rezan

+1

"E3A00001" dizesini "E3 A0 00 01" e ayırmak ister misiniz? Ne istiyorsun anlamıyorum – Schullz

cevap

1

Okumak çizgiyi geçebilir dönüştürülen dize almak için sprintf:

sprintf (converted, "%c%c %c%c %c%c %c%c%s",line [0],line [1],line [2],line [3],line [4],line [5],line [6],line [7], &line [8]); 
0

Bu kod oldukça çirkin görünüyor, ama işe yarıyor. Her neyse, satır başına 8 karakter çok büyük bir sayı değil, bu yüzden bu işi "el ile" yapmanın mantıklı olduğunu düşünüyorum.

#include <stdio.h> 

int main(void) 
{ 
    FILE *fin, *fout; 
    fin = fopen("in.asm", "r"); 
    fout = fopen("out.asm", "w"); 
    char word[8]; 
    char str[80]; 
    while(fscanf(fin, " %c%c%c%c%c%c%c%c%[^\n]", &word[0], &word[1], &word[2], &word[3], &word[4], &word[5], &word[6], &word[7], str) == 9) 
    { 
     fprintf(fout, "%c%c %c%c %c%c %c%c\t%s\n", word[0], word[1], word[2], word[3], word[4], word[5], word[6], word[7], str); 
    } 
    fclose(fin); 
    fclose(fout); 
} 
+0

Cevabınız için teşekkürler, ancak verilerim dizgindi. – Rezan

+0

@Rezan Sonra 'fscanf()' ve 'fprintf() işlevlerini' sscanf() 've' sprintf() 'olarak değiştirebilirsiniz. –