一个简单的字符转化为16进制有关问题
一个简单的字符转化为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 )
{
...
}
下面代码里,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 )
{
...
}