如何为流操作正确设置 ios 标志?
How do I properly set ios flags for stream manipulation?
我在 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
。如果你不这样做,那么 hex
和 dec
标志都会被设置。虽然我不确定如果为同一掩码设置了多个标志会发生什么,但是当同时设置 hex
和 dec
标志时,您的实现选择使用 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++ 中输入了一个基本示例,我尝试在屏幕上打印一个十六进制数字:
#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
。如果你不这样做,那么 hex
和 dec
标志都会被设置。虽然我不确定如果为同一掩码设置了多个标志会发生什么,但是当同时设置 hex
和 dec
标志时,您的实现选择使用 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);