我只想问一下如何用c语言分隔输出数据,我的数据代码定义为机器代码数据,我用了4字节的WORD指令。
typedef uint32_t REGISTER; // registers are 32 bits
typedef uint32_t WORD; // words are 32 bits
typedef uint8_t BYTE; // bytes are 8 bits
我的出局是:
E3A00001 MOV r0,#1
E3A01002 MOV r1,#2
E0802001 ADD r2,r0,r1
E2822005 ADD r2,r2,#5
我想将它们分开:
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
答案 0 :(得分:1)
您可以将读取行传递给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]);
答案 1 :(得分:0)
这段代码看起来很难看,但确实有效。无论如何,每行8个字符并不是一个很好的数字,所以我认为“手动”完成这项工作是有意义的。
#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);
}