gpt4 book ai didi

C++ 文件 IO - ASCII 值而不是二进制值

转载 作者:行者123 更新时间:2023-12-03 07:34:44 27 4
gpt4 key购买 nike

我想创建一个单字节二进制文件,其中只有一个字节:0x01。这是我用 C++ 编写的程序:

#include <iostream>
#include <fstream>
using namespace std ;

int main ( )
{
ofstream some_file ("some_file.bin", ios::out | ios::app | ios::binary);
some_file << 0x01 ;
some_file.close( );
return 0;
}

当我使用十六进制编辑器检查创建的文件时 - 我看到值 0x31 而不是 0x1。这是为什么?

最佳答案

0x01是一个整数文字。整数文字始终是整数类型,其级别至少为 int 。因此它们不能是 char 类型(或 signed char/unsigned char )。

就您而言0x01将具有类型 int .

char及其 signed/unsigned变体是 operator<< 的唯一整数类型。在std::ostream上将输出 char 中保存的值表示的单个字符.

对于其他整数类型operator<<将输出以十进制表示形式格式化的整数值。

如果要从 ASCII 代码打印单个字符,则需要强制转换 0x01char :

some_file << char{0x01};

或使用字 rune 字:

some_file << '\x01';

或者您可以使用put放置单个字符的方法,它需要 char参数,因此将导致 int 的隐式转换字面意思为char ,然后将其打印为由值表示的一个字符:

some_file.put(0x01);

some_file.put('\x01');

<<相反, put将直接写入字符,不做任何更改。 <<受可以在流上设置的格式选项的影响,例如可以添加填充。如果您想绝对确定仅打印单个字符而不进行更改,put可能是正确的选择。

关于C++ 文件 IO - ASCII 值而不是二进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59523481/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com