刚才突然想用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。