如何正确设置 ios 标志以进行流操作?

Mut*_*thm 3 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Kam*_*Cuk 5

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

你要:

std::cout.setf(std::ios::hex, std::ios::basefield);
std::cout.setf(std::ios::showbase);
Run Code Online (Sandbox Code Playgroud)

然后清除

std::cout.setf(std::ios::dec, std::ios::basefield);
std::cout.unsetf(std::ios::showbase);
Run Code Online (Sandbox Code Playgroud)