找回密码
 FreeOZ用户注册
查看: 4126|回复: 22
打印 上一主题 下一主题

[软件技巧] cout输出char类型的数据,怎么才能显示成16进制阿?

[复制链接]
跳转到指定楼层
1#
发表于 3-12-2011 13:57:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
有一 char 类型的数组,想从cout输出显示16进制显示,已经设置了ios::hex,可是总是显示成ASCII字符,做强制类型转换转换成INT,可以显示成16进制,但遇到数据为ff的时候,就显示成0xffffffff了,请各位老师指点一下
回复  

使用道具 举报

2#
发表于 4-12-2011 20:45:54 | 只看该作者
std::cout << std::hex << std::setfill('0') << std::setw(2)  << .....

评分

参与人数 1威望 +20 收起 理由
四香油饼 + 20 谢谢分享!还是不行啊:(

查看全部评分

回复  

使用道具 举报

3#
 楼主| 发表于 4-12-2011 22:58:03 | 只看该作者


我现在的设置比你少个 setfill,但加上好像依然不起作用

我改过后,我现在的语句是这样的:
前面定义:
  1. char evtbuf[256];
  2. 输出语句
  3. cout.setf(ios::showbase);
  4. cout << hex << setfill('0') << setw(2) << (unsigned int)evtbuf[i] << " ";

  5. 输出的结果类似这样:
  6. 0xffffff93 0x2f 00 .....
  7. 所有>0x80的char类型数据,都会在前面加上一串ff,不知道问题在哪里:(
复制代码
回复  

使用道具 举报

4#
发表于 4-12-2011 23:00:16 | 只看该作者

回复 #3 四香油饼 的帖子

不能这样, 只能用一个for loop, 一个字符一个字符地转.
你强制转换的话就不是一个个char字节了, 而是4个char连在一起解释为一个int

[ 本帖最后由 coredump 于 4-12-2011 23:10 编辑 ]
回复  

使用道具 举报

5#
 楼主| 发表于 4-12-2011 23:02:56 | 只看该作者
而且不知道为什么 00 的前面就没有 "0x"
回复  

使用道具 举报

6#
 楼主| 发表于 4-12-2011 23:06:26 | 只看该作者
原帖由 coredump 于 5-12-2011 00:00 发表
不能这样, 只能用一个for loop, 一个字符一个字符地转.


用了的,我没抄上来

完整的loop是这样的
  1. for (int j=0; j<m_event->event_length; j++)
  2. {
  3.      cout << hex << setfill('0') << setw(2) << (unsigned int)evebuf[j] << ' ';
  4. }
复制代码
回复  

使用道具 举报

7#
发表于 4-12-2011 23:16:35 | 只看该作者

回复 #6 四香油饼 的帖子

去掉(unsigned int)
回复  

使用道具 举报

8#
发表于 4-12-2011 23:17:24 | 只看该作者
其实还是c的printf方便  "%X"就行
回复  

使用道具 举报

9#
 楼主| 发表于 4-12-2011 23:20:14 | 只看该作者
原帖由 coredump 于 5-12-2011 00:16 发表
去掉(unsigned int)


那输出就变成 ASCII字符了啊
回复  

使用道具 举报

10#
 楼主| 发表于 4-12-2011 23:22:36 | 只看该作者
原帖由 coredump 于 5-12-2011 00:00 发表
不能这样, 只能用一个for loop, 一个字符一个字符地转.
你强制转换的话就不是一个个char字节了, 而是4个char连在一起解释为一个int


好像不是, 我真实的数据应该是 93 2f 00
输出出来是 ffffff93 2f 00
回复  

使用道具 举报

11#
发表于 4-12-2011 23:24:00 | 只看该作者

回复 #9 四香油饼 的帖子

对, 你那个方式的确都变成直接字符输出了.
如果4个char解释成一个数值的话, 你的for循环要每次+4
回复  

使用道具 举报

12#
 楼主| 发表于 4-12-2011 23:29:47 | 只看该作者
唉,这么一来觉得cout也不是原来觉得的那么好用了,好在输出只是给自己看的,好不好看是次要的。
回复  

使用道具 举报

13#
发表于 4-12-2011 23:31:47 | 只看该作者

回复 #12 四香油饼 的帖子

C++ iostream本来就不是很好用的, 还不如printf好用, 不过prinf系列函数都不安全.
回复  

使用道具 举报

14#
发表于 4-12-2011 23:40:12 | 只看该作者
油饼, 想用C++输出得随心所欲, 你可以试试这个library
http://www.fastformat.org/

评分

参与人数 1威望 +20 收起 理由
四香油饼 + 20 谢谢老乞丐

查看全部评分

回复  

使用道具 举报

15#
发表于 5-12-2011 12:54:51 | 只看该作者
原帖由 coredump 于 5-12-2011 00:31 发表
C++ iostream本来就不是很好用的, 还不如printf好用, 不过prinf系列函数都不安全.


printf:gcc 的话-Wformat -Wall,然后在为可变参数函数加个 __attribute(format) 什么的就完美了。
回复  

使用道具 举报

16#
发表于 8-12-2011 00:38:07 | 只看该作者
油饼用的啥系统?啥编译器?我咋没见过这些函数涅
回复  

使用道具 举报

17#
 楼主| 发表于 8-12-2011 10:35:41 | 只看该作者
原帖由 nnzdwxjy 于 8-12-2011 01:38 发表
油饼用的啥系统?啥编译器?我咋没见过这些函数涅


linux下的gcc编译器,不过我的这些问题都还在标准c++的范畴之内,所以应该是到哪都一样
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 25-4-2024 11:40 , Processed in 0.058992 second(s), 33 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表