2

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

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

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

4

1 回答 1

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问题,这里有一些解决方法:“永久”std::setw

于 2016-03-10T15:58:49.587 回答