fwrite 4 char数组,会写7而不是4

时间:2018-05-27 11:49:56

标签: c++ windows fwrite

源代码:

 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。

1 个答案:

答案 0 :(得分:9)

在ASCII中,10是换行符'\n'的字符代码。

由于您在非二进制模式下运行,因此换行符被解释为实际换行符,标准库将其转换为特定于平台的换行符序列,即在Windows系统上,CR-LF(回车符和换行符) ()或十六进制0D 0A

尝试以二进制模式打开文件以跳过标准库的更高级别解释,并简单地操作字节而不是字符。为此目的使用"wb"代替"w"

另外,请使用tmp代替&tmp。在某些情况下,数组会隐式转换为指针,包括手头的数据,衰减&tmp是指向数组的实际指针,在这种情况下为unsigned char (*)[5]。虽然两者在您的具体情况下都是等效的,但这可能会产生问题。