cout输出char类型的数据,怎么才能显示成16进制阿?
有一 char 类型的数组,想从cout输出显示16进制显示,已经设置了ios::hex,可是总是显示成ASCII字符,做强制类型转换转换成INT,可以显示成16进制,但遇到数据为ff的时候,就显示成0xffffffff了,请各位老师指点一下:( std::cout << std::hex << std::setfill('0') << std::setw(2)<< ..... 原帖由 coredump 于 4-12-2011 21:45 发表 http://www.freeoz.org/ibbs/images/common/back.gifstd::cout
我现在的设置比你少个 setfill,但加上好像依然不起作用:(
我改过后,我现在的语句是这样的:
前面定义:char evtbuf;
输出语句
cout.setf(ios::showbase);
cout << hex << setfill('0') << setw(2) << (unsigned int)evtbuf << " ";
输出的结果类似这样:
0xffffff93 0x2f 00 .....
所有>0x80的char类型数据,都会在前面加上一串ff,不知道问题在哪里:(
回复 #3 四香油饼 的帖子
不能这样, 只能用一个for loop, 一个字符一个字符地转.你强制转换的话就不是一个个char字节了, 而是4个char连在一起解释为一个int
[ 本帖最后由 coredump 于 4-12-2011 23:10 编辑 ] 而且不知道为什么 00 的前面就没有 "0x" :Q 原帖由 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 << ' ';
}
回复 #6 四香油饼 的帖子
去掉(unsigned int) 其实还是c的printf方便"%X"就行 原帖由 coredump 于 5-12-2011 00:16 发表 http://www.freeoz.org/ibbs/images/common/back.gif去掉(unsigned int)
那输出就变成 ASCII字符了啊 原帖由 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
回复 #9 四香油饼 的帖子
对, 你那个方式的确都变成直接字符输出了.如果4个char解释成一个数值的话, 你的for循环要每次+4 唉,这么一来觉得cout也不是原来觉得的那么好用了,好在输出只是给自己看的,好不好看是次要的。
回复 #12 四香油饼 的帖子
C++ iostream本来就不是很好用的, 还不如printf好用, 不过prinf系列函数都不安全. 油饼, 想用C++输出得随心所欲, 你可以试试这个libraryhttp://www.fastformat.org/ 原帖由 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) 什么的就完美了。 油饼用的啥系统?啥编译器?我咋没见过这些函数涅:o 原帖由 nnzdwxjy 于 8-12-2011 01:38 发表 http://www.freeoz.org/ibbs/images/common/back.gif
油饼用的啥系统?啥编译器?我咋没见过这些函数涅:o
linux下的gcc编译器,不过我的这些问题都还在标准c++的范畴之内,所以应该是到哪都一样
页:
[1]