std::ofstream::write adds characters

2019-02-06 19:29发布

I am trying to write binary file using std::ofstream::write method. I found out, that some characters are not written as they are, for example:

std::ofstream in("testout");
int i =10;

in.write((const char *)(&i), sizeof(i));
in.close();

return 0;

will write the following into a binary file: 0d 0a 00 00 00 Why is there additional 0d byte appearing?

标签: c++ ofstream
3条回答
beautiful°
2楼-- · 2019-02-06 20:04

The file is being written on a system that does text to binary translation. The value 10 (0A hex) in the lowest byte of i is being interpreted as a linefeed character (aka newline), and is being converted to a carriage return linefeed sequence (13 10 decimal, 0D 0A hex).

To solve this issue, change the first line of your code snippet as follows:

std::ofstream in("testout", std::ios::binary);

This will instruct the C++ runtime library to treat the file as binary and not perform any translation of bytes between newline and carriage return linefeed sequences.

查看更多
手持菜刀,她持情操
3楼-- · 2019-02-06 20:07

You´ll have to specify std::ofstream::binary when opening.

Else, on Windows in textfile mode, \n (0x0a) in a program will be converted to/from \r\n (0x0d 0x0a) when writing/reading the file.

查看更多
女痞
4楼-- · 2019-02-06 20:19

You opened the file in text mode and running on Windows. It adds the 0x0d to 0x0a. You need to use binary mode when you create the ofstream instance.

查看更多
登录 后发表回答