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

标签 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;
}

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

最佳答案

要设置hex,您需要清除所有basefield。如果您不这样做,则 hexdec 标志都会被设置。虽然我不确定如果为同一掩码设置了多个标志会发生什么,但当同时使用 hexdec 时,您的实现选择使用 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);

关于c++ - 如何正确设置 ios 标志以进行流操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59273928/

相关文章:

android - 在 Android Studio 上将您自己的库与 JNA 结合使用

c++ - 在 Windows 上编译/执行汇编程序的最简单方法?

c++ - 使用For循环生成随机视觉噪声

c++ - 分割字符串

c++ - UMFPACK 和 BOOST 的 uBLAS 稀疏矩阵

c++ - 如何在cpp中仅针对 float 使用setprecision

c++ - 混合数类 istream 问题

c++ - 在 C++ 中没有 **std::fixed** 的 **std::setprecision()** 的作用是什么?

c++ - std::stringstream 的小数点?

c++ - 如何在 C++ 中对齐用户输入(不使用 iomanip)