刚才突然想用cout输出一个指针的地址,发现总是输出10进制,不方便看,因此就查看有什么方法可以输出16进制。

使用的IDE是VS2019。

最开始就是用hex。

cout<<hex<<23<<endl;

结果:

17

说明正常。

然后使用<iomanip>里的setiosflags。以为跟普通的用法相同。</iomanip>

cout<<setiosflags(ios::hex)<<23<<endl;

结果输出:

23

发现不能输出预想的结果。因此去cppreference查,发现用法差不多,但是在前面使用了resetiosflags。因此逐步调试。由于在vs里不能查看cout。因此采用ofstream。

ofstream  ofile("ceshi.txt");
ofile<<resetiosflags(ios::dec);
ofile<<setiosflags(ios::hex)<<23<<endl;

ofile刚开始初始化的时候,fmt标志位被初始化为513.

然后reset dec标志位后,fmt标志位被初始化为1,说明dec为其中第9位(从0开始,下同)。

然后set hex标志位,fmt标志位被初始化为2049,说明hex为其中第11位。

并且从第一次的表现来看,dec标志的优先级大于hex标志位。

然后使用cout的成员函数:setf。

cout.setf(ios_base::hex,ios_base::basefield);

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

cout.setf(cout.hex,cout.basefield);


ios_base::fmtflags ff;
ff = cout.flags();
ff&=~cout.basefield
ff|=cout.hex;
cout.flags(ff);

使用setf或者flags都是需要解除设置basefield位,然后设置hex。