简体   繁体   English

C ++:将int转换为char不会产生正确的值

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

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. 它应该将文件(out.txt)中的每个值从0到255放入char中。 However, when I open out.txt in a hex editor, the 11th byte should be 0A, but it is 0D. 但是,当我在十六进制编辑器中打开out.txt时,第11个字节应该是0A,但它是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. 从这里开始,每个其他值都被推回,因此第12个字节为0A,第13个字节为0B,一直到第256个为FE而不是FF,就像它应该的那样。 I am compiling and running my code using Visual Studio 2017 on Windows 10 if it helps. 我正在使用Windows 10上的Visual Studio 2017编译和运行我的代码,如果它有帮助的话。

main.cpp 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) out.txt(十六进制值)

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

std::ofstream is trying to be helpful. std::ofstream试图提供帮助。 In text mode, when you write a \\n , it actually writes an \\r\\n , since that's what Windows uses for line breaks. 在文本模式下,当你写一个\\n ,它实际上会写一个\\r\\n ,因为这是Windows用于换行的内容。 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. 此外,您只写0 - 254,因此缺少最后一个255。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM