Reputation: 604
I have a basic program I wrote just to test writing to files. It is supposed to put every value from 0 to 255 in a file (out.txt) as a char. However, when I open out.txt in a hex editor, the 11th byte should be 0A, but it is 0D. From here every other value is pushed back so the 12th byte is 0A, the 13th is 0B, all the way to the 256th being FE instead of FF like it should be. I am compiling and running my code using Visual Studio 2017 on Windows 10 if it helps.
main.cpp
#include <iostream>
#include <stdio.h>
#include <fstream>
int main(){
std::ofstream f("out.txt",std::ios::out);
for(int i = 0; i < 255; i++){
f << (char)i;
}
return 0;
}
out.txt (hex values)
00 01 02 03 04 05 06 07 08 09 0D 0A 0B 0C 0D 0E
0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E
1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E
2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E
3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E
4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E
5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E
6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E
7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E
8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E
9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE
AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE
BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE
CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE
DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE
EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE
Upvotes: 2
Views: 151
Reputation: 14269
std::ofstream
is trying to be helpful. In text mode, when you write a \n
, it actually writes an \r\n
, since that's what Windows uses for line breaks. Open the file in binary mode instead of text mode:
std::ofstream f("out.txt", std::ios::out | std::ios::binary);
Also, you are only writing 0 - 254, so the last one, 255, is missing.
Upvotes: 11