std::ofstream::write adds characters

2019-02-06 19:49发布

问题:

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?

回答1:

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.



回答2:

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.



回答3:

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.



标签: c++ ofstream