You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MinGW G++(Windows)下fwrite写入字节异常及0D字节含义咨询

问题解答:Windows下写入char值10变成0D 0A的原因

这个问题其实是Windows平台特有的文件换行机制在作祟,我来给你拆解清楚:

核心原因:文本模式的自动转换

你代码里用fopen("aa.bin", "w")打开文件时,用的是文本模式(这是Windows下fopen的默认模式)。在Windows系统中,C标准库的文本模式会自动把Unix风格的换行符\n(ASCII值为10,也就是你数组里的10)转换成Windows标准的换行序列\r\n——对应十六进制的0D 0A。

0D字节是什么?

十六进制的0D对应的是ASCII字符\r,也就是回车符(Carriage Return)。在早期打字机时代,它的作用是让打印头回到行首;到了电脑系统里,Windows选择用\r\n的组合来表示换行(先回车再换行),而Unix/Linux类系统只需要\n(直接换行)。

怎么解决这个问题?

如果你想原封不动写入二进制数据(比如你的unsigned char数组),需要用二进制模式打开文件,把fopen的第二个参数改成"wb":

FILE *ff = fopen("aa.bin", "wb");

这样修改后,写入的十六进制内容就会和你数组里的原始值完全一致:0A 0A B4 FF 28,不会再有额外的0D字节。

补充一句:哪怕你把文件名命名为.bin,只要用文本模式打开,Windows的C标准库还是会触发换行符转换,这点要特别注意~

内容的提问来源于stack exchange,提问作者Osama Mohammed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:08:47