四香油饼 发表于 3-12-2011 13:57:16

cout输出char类型的数据,怎么才能显示成16进制阿?

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

coredump 发表于 4-12-2011 20:45:54

std::cout << std::hex << std::setfill('0') << std::setw(2)<< .....

四香油饼 发表于 4-12-2011 22:58:03

原帖由 coredump 于 4-12-2011 21:45 发表 http://www.freeoz.org/ibbs/images/common/back.gif
std::cout

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

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

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

coredump 发表于 4-12-2011 23:00:16

回复 #3 四香油饼 的帖子

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

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

四香油饼 发表于 4-12-2011 23:02:56

而且不知道为什么 00 的前面就没有 "0x" :Q

四香油饼 发表于 4-12-2011 23:06:26

原帖由 coredump 于 5-12-2011 00:00 发表 http://www.freeoz.org/ibbs/images/common/back.gif
不能这样, 只能用一个for loop, 一个字符一个字符地转.

用了的,我没抄上来:L

完整的loop是这样的for (int j=0; j<m_event->event_length; j++)
{
   cout << hex << setfill('0') << setw(2) << (unsigned int)evebuf << ' ';
}

coredump 发表于 4-12-2011 23:16:35

回复 #6 四香油饼 的帖子

去掉(unsigned int)

coredump 发表于 4-12-2011 23:17:24

其实还是c的printf方便"%X"就行

四香油饼 发表于 4-12-2011 23:20:14

原帖由 coredump 于 5-12-2011 00:16 发表 http://www.freeoz.org/ibbs/images/common/back.gif
去掉(unsigned int)

那输出就变成 ASCII字符了啊

四香油饼 发表于 4-12-2011 23:22:36

原帖由 coredump 于 5-12-2011 00:00 发表 http://www.freeoz.org/ibbs/images/common/back.gif
不能这样, 只能用一个for loop, 一个字符一个字符地转.
你强制转换的话就不是一个个char字节了, 而是4个char连在一起解释为一个int

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

coredump 发表于 4-12-2011 23:24:00

回复 #9 四香油饼 的帖子

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

四香油饼 发表于 4-12-2011 23:29:47

唉,这么一来觉得cout也不是原来觉得的那么好用了,好在输出只是给自己看的,好不好看是次要的。

coredump 发表于 4-12-2011 23:31:47

回复 #12 四香油饼 的帖子

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

coredump 发表于 4-12-2011 23:40:12

油饼, 想用C++输出得随心所欲, 你可以试试这个library
http://www.fastformat.org/

ebencheung 发表于 5-12-2011 12:54:51

原帖由 coredump 于 5-12-2011 00:31 发表 http://www.freeoz.org/ibbs/images/common/back.gif
C++ iostream本来就不是很好用的, 还不如printf好用, 不过prinf系列函数都不安全.

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

电视机 发表于 8-12-2011 00:38:07

油饼用的啥系统?啥编译器?我咋没见过这些函数涅:o

四香油饼 发表于 8-12-2011 10:35:41

原帖由 nnzdwxjy 于 8-12-2011 01:38 发表 http://www.freeoz.org/ibbs/images/common/back.gif
油饼用的啥系统?啥编译器?我咋没见过这些函数涅:o

linux下的gcc编译器,不过我的这些问题都还在标准c++的范畴之内,所以应该是到哪都一样
页: [1]
查看完整版本: cout输出char类型的数据,怎么才能显示成16进制阿?