源代码:
main(void) {
unsigned char tmp[5] = {10, 10, 180, 255, 40};
FILE *ff = fopen("aa.bin", "w");
fwrite(&tmp, sizeof(char), 5, ff);
}
执行并查看文件aa.bin的Hex内容时,它看起来像这样:
0D 0A 0D 0A B4 FF 28
为什么10的值写入两个字节(0D 0A),而char类型只保存1个字节。 (0D)意味着什么?
我正在使用G ++编译器(Windows上的MinGW)和cpp11。
答案 0 :(得分:9)
在ASCII中,10是换行符'\n'
的字符代码。
由于您在非二进制模式下运行,因此换行符被解释为实际换行符,标准库将其转换为特定于平台的换行符序列,即在Windows系统上,CR-LF(回车符和换行符) ()或十六进制0D 0A
。
尝试以二进制模式打开文件以跳过标准库的更高级别解释,并简单地操作字节而不是字符。为此目的使用"wb"
代替"w"
。
另外,请使用tmp
代替&tmp
。在某些情况下,数组会隐式转换为指针,包括手头的数据,衰减。 &tmp
是指向数组的实际指针,在这种情况下为unsigned char (*)[5]
。虽然两者在您的具体情况下都是等效的,但这可能会产生问题。