我想请求一点帮助。
我从文件中写了我的小程序来复制字节,但是把它保存为文本。 这就是我现在所拥有的:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf ("Opening input.txt:\n");
FILE *fi;
fi = fopen("input.txt", "rb");
FILE *fo;
fo = fopen("log.txt", "w");
if (fo == NULL)
{
printf("Error opening file!\n");
exit(1);
}
int c;
while((c=fgetc(fi))!=EOF)
{
printf("%02X", c & 0xFF);
fprintf(fo, "%02X", c & 0xFF);
}
printf("\n\n--- End of file ---\n");
fprintf(fo, "\n\n--- End of file ---\n");
fclose(fi);
fclose(fo);
return 0;
}
看起来一切正常,但我只有一点 log.txt 格式的请求。
这是HEX格式的 input.txt 的一个示例:
00 83 70 22 00 30 ........ 88 8C FF FF
00 83 70 22 ........ 88 8C FF FF
00 83 70 22 00 ........ 88 8C FF FF
行具有可变长度。
它的印刷方式如下:
008370220030 ........ 888CFFFF00837022 ........ 888CFFFF0083702200 ........ 888CFFFF
---文件结束---
一切都很完美,但只有一个问题是我想在检测到“0083”时打印新行。像这样:
008370220030 ........ 888CFFFF
00837022 ........ 888CFFFF
0083702200 ........ 888CFFFF
---文件结束---
我对C语言没有太多经验,但这个小程序可以按我的意愿运行。当检测到同步字节时,只知道如何指定代码来打印新行。
非常感谢您的帮助!!!
修改!!! 所以最后一切都按我的意愿运作!谢谢大家!!!
答案 0 :(得分:0)
声明:
uint16_t detect = 0xffff;
并在printf之后添加
detect <<= 8;
detect |= (unsigned)ch & 0xff;
id(detect == 0x0083) printf("\n");
答案 1 :(得分:0)
简约状态机:
\0
,它尚未打印它\0
,但是(可能)需要首先输出\n
。 [如果出现两个连续的\0
个字符,程序将会失败,但可以通过额外的条件修复]
int ch,state;
for(state=0;;){
ch = getc(fi);
if (ch == EOF) break;
switch (state) {
case 0: if(ch == 0) { state++; continue;}
break;
case 1: if(ch == 0x83) fputc('\n', fo);
fprintf(fo,"00");
state = 0;
break;
}
fprintf(fo, "02X",ch&0xff);
}
if(state) fprintf(fo,"00");