Domanda

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?

È stato utile?

Soluzione

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.

Altri suggerimenti

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.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top