读书人

一个简单的字符转化为16进制有关问题

发布时间: 2012-03-04 11:13:33 作者: rapoo

一个简单的字符转化为16进制问题
下面代码里,char2Hex(char)函数是否存在什么错误?

#include <iostream>
using namespace std;

void char2Hex( char c ) // 将字符以16进制表示
{
char ch = c/0x10 + '0 '; if( ch > '9 ' ) ch += ( 'A '- '9 '-1);
char cl = c%0x10 + '0 '; if( cl > '9 ' ) cl += ( 'A '- '9 '-1);
cout < < ch < < cl < < ' ';
}

void main()
{
char str[] = "I love 中国 ";
cout < <strlen(str) < <endl;

for( size_t i=0; i <strlen(str); ++i )
char2Hex( str[i] );
cout < < endl;
}

[解决办法]
此题确实有个较隐蔽的错误.
注意char类型当最高位是1(例如汉字)时,其数值是小于0的,这样c/0x10和c%0x10就得不到需要的结果了.最简单的改法是把char2Hex()的参数类型改为unsigned char:

void char2Hex( unsigned char c )
{
...
}

读书人网 >C++

热点推荐