Answers:
ios::fmtflags f(cout.flags());
并使用恢复状态out.flags(f);
。
std::cout.flags(f);
要操纵流以十六进制打印,请使用hex
操纵器:
cout << hex << a;
默认情况下,十六进制字符以小写形式输出。要将其更改为大写,请使用uppercase
操纵器:
cout << hex << uppercase << a;
若要稍后将输出更改回小写,请使用nouppercase
操纵器:
cout << nouppercase << b;
nouppercase
要改变输出回十进制?
我知道这不是OP所要求的,但是我仍然认为有必要指出如何使用printf来实现。我几乎总是喜欢使用它而不是std :: cout(即使没有以前的C背景)。
printf("%.2X", a);
“ 2”定义精度,“ X”或“ x”定义大小写。
printf("hello\n")
等价于fprintf(stdout, "hello\n")
。更有用的是,您可以将stdout
(或stdin
或stderr
)传递给带有FILE*
参数的函数。
您也可以使用各种标志和掩码。有关更多信息,请参考http://www.cplusplus.com/reference/iostream/ios_base/setf/。
#include <iostream>
using namespace std;
int main()
{
int num = 255;
cout.setf(ios::hex, ios::basefield);
cout << "Hex: " << num << endl;
cout.unsetf(ios::hex);
cout << "Original format: " << num << endl;
return 0;
}
std::hex
获取十六进制格式,但这是一个有状态的选项,表示您需要保存和恢复状态,否则将影响以后的所有输出。
天真地切换回std::dec
原来的标记是好的,前提是那是以前的标志,而事实并非如此,尤其是在编写库时。
#include <iostream>
#include <ios>
...
std::ios_base::fmtflags f( cout.flags() ); // save flags state
std::cout << std::hex << a;
cout.flags( f ); // restore flags state
这结合了Greg Hewgill的回答和其他问题的信息。
使用std::uppercase
和std::hex
格式化整数变量a
以十六进制格式显示。
#include <iostream>
int main() {
int a = 255;
// Formatting Integer
std::cout << std::uppercase << std::hex << a << std::endl; // Output: FF
std::cout << std::showbase << std::hex << a << std::endl; // Output: 0XFF
std::cout << std::nouppercase << std::showbase << std::hex << a << std::endl; // Output: 0xff
return 0;
}
cout << hex << a << dec;
将其改回原样。