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:
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.
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.
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.