Io 这是执行字节I/O的正确方法吗?

Io 这是执行字节I/O的正确方法吗?,io,binary,byte,ofstream,uint8t,Io,Binary,Byte,Ofstream,Uint8t,我试图将字节写入二进制文件,我编写了这个小测试程序来检查我是否做得正确 std::uint8_t F = 10111001; std::ofstream K("C:/Users/WDR/Desktop/kml.enc", std::ios::binary); for(int i = 0; i < 256; i++) { K << F; } 文件正在正确写入。我得到一个256字节的文件。但是,当我在十六进制编辑器中看到它时,每个字节都显示值00011001。我做错什

我试图将字节写入二进制文件,我编写了这个小测试程序来检查我是否做得正确

std::uint8_t F = 10111001;

std::ofstream K("C:/Users/WDR/Desktop/kml.enc", std::ios::binary);

for(int i = 0; i < 256; i++)
{
    K << F;
}
文件正在正确写入。我得到一个256字节的文件。但是,当我在十六进制编辑器中看到它时,每个字节都显示值00011001。我做错什么了吗?或者在十六进制编辑器中看到的字节表示方式是否不同?请澄清。谢谢。

10111001不是二进制数。这是一个十进制数。将此数字分配给uint8会得到10111001%256,即二进制的25或11001


您希望写入std::uint8\u t F=0xB9

所以,如果我正在从一个文件读入一个std::vector,我是否应该将0x前缀添加到我读取的每个字节,以便正确地将其写入另一个文件?还有,0x是什么意思?它也可以用于二进制表示吗?如果不是,我如何将二进制表示的字节写入文件?把它们转换成十六进制?请澄清。谢谢您的回答。数字前面的前缀0x表示它是十六进制数字。没有二进制数的前缀,所以如果你想在C++代码中使用二进制数,你必须使用它的十六进制表示与0x前缀,它的八进制表示用0个前缀或它的十进制表示没有前缀。但这只是一个表示:0xB9、185和0271是同一个数字。如果您从一个文件读取并写入另一个文件,则无需考虑基数。每个计算机只有二进制数,问题是C++文件中数字的表示。二进制文件的0B前缀在C++中不存在,但在java中是这样的。谢谢您确认,@ MCH。我已经测试过了,事实上,在这种情况下我不需要担心它。但是,如果我必须向文件中写入哈夫曼代码,该怎么办?我在C++程序中生成它们,它们被表示为0和1的字符串。整个文件的编码在一个std::vector中,我可以从中一次将它们累积8位到一个std::uint8\t中。如何将此std::uint8\u写入文件?std:hex,然后是std::showbase?我认为您应该简单地将值写入文件,该文件必须以二进制模式打开。std::hex或std::showbase用于文本输出,而不是二进制文件。