我在尝试将二进制文件转换为文本文件时遇到问题。现在,我得到的输出是“你好16”。我应该得到5行输出,其中第一行应该是“你好32”。我不确定自己哪里出错了,但我现在一直想弄清楚几个小时。 Link to Binary File
void BinaryToText(char *inputFile, char *outputFile) {
unsigned char str[256];
unsigned int num;
int fileLen;
FILE *finp;
FILE *fout;
finp = fopen(inputFile, "r");
fout = fopen(outputFile, "w");
fseek(finp, 0, SEEK_END);
fileLen = ftell(finp);
fseek(finp, 0, SEEK_SET);
while (fread(&fileLen, sizeof(char), 1, finp) == 1) {
fread(&str, sizeof(str), 1, finp);
fread(&num, sizeof(int), 1, finp);
fprintf(fout, "%s %d\n", str, num);
}
fclose(finp);
fclose(fout);
}
答案 0 :(得分:1)
你的二进制文件格式似乎很尴尬:
"r"
打开输入文件:应使用"rb"
以二进制模式打开。ftell()
确定文件大小。请注意,这不适用于管道和设备。在你的情况下,无论如何你都不使用fileLen
也没关系。 fileLen
。int
的字节顺序和大小符合您的预期。'\0'
,否则您将调用未定义的行为。如果没有看到编写代码,很难说出错了什么。
请注意,二进制文件应该以{{1}}打开,以防止在某些平台(尤其是Windows)上对换行序列进行虚假转换。
修改强>
形成评论中提供的额外信息,这是一个修改后的版本,应该更适当地解析二进制文件:
"rb"