使用ofstream写入0x0a时,该函数实际写入0x0d 0x0a两个字节?
本人在写一个unicode编码转换的小软件,奇怪的是文本转换前转换后,在换行的位置总是多出来一个0x0d,经过调试发现竟然有如下现象。使用:
- C/C++ code
// ofs is an ofstream object// buffer is a 1-byte dataofs.write(reinterpret_cast<char *>(&buffer), 1);
写入一个字节数据时,当buffer的字节数据为0x0a(Ascii码LF,即是换行)时,该操作实际上写入了两个字节数据,0x0d(Ascii码CR,即回车)和0x0a,不知道大家是不是有碰到过这种问题呢?
我觉得相当奇怪,如果使用这个函数的用户是在写一个二进制文件而非文本文件,那这种“自动补全换行符”的行为不就成了画蛇添足了,很有可能破坏用户的数据呀。有没有经验帝来解答一下
[解决办法]
用binary方式打开文件即可。