【问题标题】:std::cout of the hexadecimal 0x00十六进制 0x00 的 std::cout
【发布时间】:2016-03-10 15:39:58
【问题描述】:

我必须在标准输出上打印一些 std::uint16_t 值作为十六进制格式,文本格式如下:0x##。 我在网上找到了这段代码,它适用于除0 之外的每个值:

std::cout << std::internal 
          << std::setfill( '0' ) 
          << std::hex 
          << std::showbase 
          << std::setw( 4 ) 
          << value << std::endl;

出于某种我不明白的原因,0 被打印为0000。 所有其他值都按预期正确打印。

【问题讨论】:

  • 正如Notes section here 中所见,这是一个深思熟虑的选择。如何绕过它?不确定,恐怕,从来不需要。听起来您可能需要开始创建自己的 num_put,这在谚语中很痛苦。
  • 每个问题一个问题。
  • 我相当肯定程序员设计了这个系统(“零在每个基础上都是一样的,有什么问题?”)。我认为... &lt;&lt; "0x" &lt;&lt; setw(2) &lt;&lt; ... 应该可以工作。

标签: c++ hex iostream iomanip


【解决方案1】:

关于您的其他问题。 您只需要再次设置宽度。其余的操纵器是持久的。

std::cout << std::internal 
      << std::setfill( '0' ) 
      << std::hex 
      << std::showbase ;

for(std::uint16_t i =1;i<255;++i){
      std::cout<< std::setw( 4 )<<i<<"\n";
}

要克服setw 问题,这里有一些解决方法:“Permanent” std::setw

【讨论】:

    猜你喜欢
    • 2010-10-03
    • 2013-03-31
    • 2012-06-17
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多