使用cout输出十六进制而非十进制

4
有没有人想过一个简单的std::cout语句可能会以十六进制格式打印一个本应该是十进制(如整数)的值?
例如,我有一行代码:

std::cout << "_Agent [" << target << "] is still among " << ((target->currWorker)->getEntities().size()) << " entities of worker[" << target->currWorker << "]" << std::endl;

它将输出:

_Agent [0x2c6d530] is still among 0x1 entities of worker[0x2c520f0]

注意:
1. 输出结果有时为十进制,有时为十六进制。
2. 即使我将((target->currWorker)->getEntities().size())更改为(int)((target->currWorker)->getEntities().size()),行为也是相同的。
有什么提示吗?
谢谢。

1
在你的“实际”代码中,你是否使用了 std::cout << std::hex ... - Chad
target是什么?看起来这是target的地址。所有的十六进制数都像是地址。 - gongzhitaao
2个回答

17

您可能在之前的代码中将std::cout设置为以十六进制打印,但忘记了重置。例如:

std::cout<<std::hex<<12;
/*blah blah blah*/
std::cout<<12; //this will print in hex form still

那么你需要按照以下方式进行操作

std::cout<<std::dec<<12;

以十进制形式打印。


4

在你的代码中找到像这样的一行:std::cout << std::showbase << std::hex;,它将std::cout设置为以十六进制并带有0x前缀的方式输出。

要将其重置为以十进制输出,请在当前cout之前添加此行:std::cout<<std::dec

您可以在这里了解更多关于C++ IO操作符标志的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接