Osa*_*'ai 7 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);
}
Run Code Online (Sandbox Code Playgroud)
执行并查看文件aa.bin的Hex内容时,它看起来像这样:
0D 0A 0D 0A B4 FF 28
为什么值10以两个字节(0D 0A)写入,而char类型仅保存1个字节.(0D)是什么意思?
我正在使用G ++编译器(Windows上的MinGW)和cpp11.
在ASCII中,10是换行符的字符代码'\n'.
由于您以非二进制模式运行,因此换行符被解释为实际换行符,标准库将其转换为特定于平台的换行符序列,即在Windows系统上,CR-LF(回车符和换行符)或0D 0A十六进制.
尝试以二进制模式打开文件以跳过标准库的更高级别解释,并简单地操作字节而不是字符.使用"wb"用于这一目的的替代"w".
另外,使用tmp而不是&tmp.在某些情况下,数组被隐式转换为指针,包括手头的数据,它会衰减.&tmp是一个指向数组的实际指针,unsigned char (*)[5]在这种情况下.虽然两者在您的具体情况下是等效的,但这可能会产生问题.
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |