C++格式化输出之16进制

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

全部评论

相关推荐

07-15 12:24
重庆大学 运营
坏消息:和好工作擦肩而过
给点吧求求了:怎么可能因为差几秒,估计就是简历更好看婉拒了
点赞 评论 收藏
分享
07-18 15:02
门头沟学院 Java
刚打开网申页面就不想填了,还是不要为难自己了
poppinzhan...:多益老行业毒瘤了,碰到徐波这种恶心的烂人,去了也是受罪。
点赞 评论 收藏
分享
Lorn的意义:1.你这根本就不会写简历呀,了解太少了 2.你这些项目经历感觉真的没啥亮点啊,描述的不行,重写书写一下让人看到核心,就继续海投 注意七八月份ofer还是比较多的,越往后机会越少,抓住时机,抓紧检查疏漏,加油查看图片
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务