整数生成十六进制值错误

时间:2012-08-28 11:50:37

标签: c++ integer hex

我的程序发生了一些奇怪的事情。我目前在我的程序中使用了很多线程,并且不可能在这里粘贴所有内容。

然而,这是我的问题:

int value = 1000;
std::cout << value << std::endl;
//output:  3e8

我知道为什么输出3e8?

是什么命令将其修复回打印十进制值?

提前致谢! :)

3 个答案:

答案 0 :(得分:11)

其他一些线程将std::cout流的默认输出基数更改为十六进制。请注意,1000 10 = 3e8 16 ,即1000 == 0x3e8

答案 1 :(得分:6)

在您的计划中的某个地方进行如下呼叫:

std::cout << std::hex << value;

已被使用。要将输出恢复为正常(十进制),请使用:

std::cout << std::dec;

这里有一个relevent link,可以在std :: cout上输出数字的不同方式。

另外,正如下面的评论所指出的,安全地修改cout标志的标准方法如下:

ios::fmtflags cout_flag_backup(cout.flags()); // store the current cout flags

cout.flags ( ios::hex ); // change the flags to what you want

cout.flags(cout_flag_backup); // restore cout to its original state

Link to IO base flags


如下面的评论中所述,指出在使用IO Streams时最好在线程和流之间进行某种形式的同步,也就是说,确保没有两个线程可以一次使用相同的流 这样做可能也会集中你的流调用,这意味着将来调试这样的东西要容易得多 Heres an SO question that may help you

答案 2 :(得分:3)

可能是另一个线程在cout上将输出更改为十六进制。我怀疑这些流是线程安全的。