Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++: Casting int To char Doesn't Yield Correct Value

Tags:

c++

casting

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
like image 540
brenden Avatar asked Dec 12 '25 14:12

brenden


1 Answers

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.

like image 66
tkausl Avatar answered Dec 14 '25 04:12

tkausl