gpt4 book ai didi

c++ - cout << std::ios::hex 是做什么的?

转载 作者:IT老高 更新时间:2023-10-28 22:24:20 26 4
gpt4 key购买 nike

这个问题来 self 最近遇到的一个错误。我试图将一些整数值保存为十六进制文件。例如,这是我应该做的:

cout << std::hex << value << endl;                 // (1)

但是一不小心,我就这样用了:

cout << std::ios::hex << value << endl;            // (2) 

编译器没有提示,但显然结果不正确。我随机尝试了几个值,似乎 (2) 实际上给出了部分正确的结果,只是它附加了 800 作为前缀。我不明白 800 是从哪里来的,也没有在任何地方看到好的引用资料。任何人都可以解释引擎盖下发生了什么吗?

cout << std::hex << 255 << endl;       // output: FF
cout << std::ios::hex << 255 << endl; // output: 800ff

cout << std::hex << 135 << endl; // output: 87
cout << std::ios::hex << 135 << endl; // output: 80087

cout << std::hex << 11 << endl; // output: b
cout << std::ios::hex << 11 << endl; // output: 800b

最佳答案

这实际上是 std::ios_base::hex。这是一个实现定义的位掩码。在内部,流有一个名为 fmtflags 的整数。它存储格式的当前状态。

在您的实现中,hex 是标志 0x800。其他标志将指示它是否处于科学计数模式,boolalpha 是否开启等。

std::hex 函数在 fmtflags 中设置 std::ios_base::hex 标志。

所以你的输出是这个标志的整数值(在你之前发送 std::hex 之后的十六进制)。

关于c++ - cout << std::ios::hex 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34030646/

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