如何正确设置用于流操作的ios标志?

时间:2019-12-10 19:14:49

标签: c++ iomanip

我在C ++中键入了一个基本示例,其中我尝试在屏幕上以十六进制的形式打印数字:

#include <iostream>
#include <iomanip>

int main()
{
    unsigned number {314};

    auto flags {std::ios::showbase | std::ios::hex};
    std::cout.setf(flags);

    // expected output: 0x13A
    std::cout << number << std::endl;

    std::cout.unsetf(flags);

   // expected output: 314
   std::cout << number << std::endl;

   return 0;
}

但是,数字永远不会以十六进制格式显示。我是否正确设置了标志?

1 个答案:

答案 0 :(得分:3)

要设置hex,您需要清除所有basefield。如果您不这样做,则同时设置hexdec标志。虽然我不确定如果为同一掩码设置了多个标志会发生什么,但是当同时设置了dechex标志时,您的实现选择使用dec

您要

std::cout.setf(std::ios::hex, std::ios::basefield);
std::cout.setf(std::ios::showbase);

然后用

清除
std::cout.setf(std::ios::dec, std::ios::basefield);
std::cout.unsetf(std::ios::showbase);