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

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

本文关键字:int 转换 字符 C++      更新时间:2023-10-16

我有一个基本程序,我只是为了测试写作。它应该将每个值从文件(out.txt)中的每个值置于char中。但是,当我在十六进制编辑器中打开时,第11个字节应为0a,但为0d。从这里开始,每个其他值都被推回了回去,因此第12个字节为0a,第13个为0b,一直到第256个为Fe而不是FF,而不是应该。如果有帮助,我正在使用Visual Studio 2017编译和运行代码。

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

std::ofstream试图有所帮助。在文本模式下,当您编写n时,它实际上会写入rn,因为这就是Windows用于线路断路的方法。以二进制模式而不是文本模式打开文件:

std::ofstream f("out.txt", std::ios::out | std::ios::binary);

另外,您只写0-254,所以最后一个255丢失了。