一个字符传的问题,我不知道是什么意思,谢谢

kesaihao862 2008-03-30 09:09:37
45. 以下代码有什么问题?[C难]
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 << ' ';
}
char str[] = "I love 中国";
for( size_t i=0; i<strlen(str); ++i )
char2Hex( str[i] );
cout << endl;
...全文
204 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
study_live 2008-10-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kesaihao862 的回复:]
为啥要求余,和求商呢,怎么理解呢,谢谢?哪位高人告诉我啊?
[/Quote]

求商是为了计算出字符C化成十六进制后的十位上的数字, 求余则是取个位了
而汉字是由2个字节组成, 被子你这么分解所以显示就不正常了
kesaihao862 2008-10-01
  • 打赏
  • 举报
回复
4. if( ch > '9' ) ch += ('A'-'9'-1); 意思就是,产生下列转换:
ch 对应的字符
10 ‘A’
11 ‘B’
12 ‘C’
13 ’D’
14 ‘E’
15 ‘F’

你这里的转化好象不对吧?
kelvin_2013 2008-06-26
  • 打赏
  • 举报
回复
把char c 改为 unsigned char c
bjjfirst 2008-04-09
  • 打赏
  • 举报
回复
1. 0x10 表示这是个16进制的数, 它的10进制就是16, 同理,0x11表示17, 0xFF表示255.
2. 在c++中char类型的范围是 0-255,也就是说超过这个范围的值就不能用char表示。 其实,char只能表示0-127之间的字符,128-255之间的字符叫扩展的asc码。
3. char范围是0-255,也就是说它是byte,也就是说用8个二进制位就可一表示了,通常4二进制的bit用1个16进制表示。0-255用16进制表示就是0x00-0xFF.
4. if( ch > '9' ) ch += ('A'-'9'-1); 意思就是,产生下列转换:
ch 对应的字符
10 ‘A’
11 ‘B’
12 ‘C’
13 ’D’
14 ‘E’
15 ‘F’

5. c/0x10 就是求16进制表示的高位。
c%0x10 就是求16进制的低位。
如果你还理解不了,给你另一个例子:如何得到一个10进制说的各个位。如十进制数:12。分别求它的个位和十位:
它的十位:12/10, 得到的值就是1.
它的个位:12%10,得到的值就是2.

6.最后告诉lz, 9和'9'是完全不一样的两个东西,用下面的代码测试下:
std::cout << 9 <<" " <<(int)'9' << std::endl;
结果是:
9 57

也就是说‘9’的值是57,并不是9.
7.char就是一个数字而已,只不过asc规定了这个数在作为字符显示时的值而已,测试代码:
std::cout << (char)67 <<(char)43<<(char)43 << std::endl;



linuxsir2007 2008-04-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kesaihao862 的回复:]
大哥,你能解释这个程序吗,c/0x10代表啥意思啊,不好意思,整个程序我都不是很理解...
[/Quote]
0x10就是16的16进制啊
就是c/16
  • 打赏
  • 举报
回复
汉字是占2个字节的,LZ在程序里调用的char2Hex( char c )参数是1个字符,本身传递的时候就出错了,所以汉字“中”是不会被正确地转换的。楼主可以按照8楼仁兄提示的修改一下调用的这个char2Hex( char c )函数。
我个人认为,直接在主函数里用%x或%X以16进制显示。
kesaihao862 2008-04-08
  • 打赏
  • 举报
回复
为啥要求余,和求商呢,怎么理解呢,谢谢?哪位高人告诉我啊?
kesaihao862 2008-04-08
  • 打赏
  • 举报
回复
大哥,你能解释这个程序吗,c/0x10代表啥意思啊,不好意思,整个程序我都不是很理解...
kakaying 2008-04-07
  • 打赏
  • 举报
回复
转换十六进制不用这么麻烦吧,直接使用sprintf内存输入更方便吧
将字符串转换为十六进制(加了%)
注意,/*编译器在处理中文字符时,会自动根据字符的位7来读入一个
* 或两个字符,这时可以强制采用unsigned char *来读入一个字符。***********************************************************************/
const char* CharToHex (const char* in, char* out)
{
if (!in || !out) return 0;

for( ; *in != 0; )
{
unsigned char *p = (unsigned char*) in;
char a[3];

*out++ = '%';
sprintf(a, "%02x", *p);
*out++ = a[0];
*out++ = a[1];
++in;
}//end for

*out = 0;
return out;
}


cout << CharToHex("I love 中国") 执行结果:%49%20%6c%6f%76%65%20%d6%d0%b9%fa
ahuisafe 2008-04-07
  • 打赏
  • 举报
回复

#include <iostream.h>
#include <string.h>
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 << ' ';
}


int main()
{
char str[] = "I love 中国";
for( size_t i=0; i <strlen(str); ++i )
char2Hex( str[i] );
cout<< endl;
}


//
49 20 6C 6F 76 65 20 .& -0 ,) 0*
Press any key to continue
forckgcs 2008-04-07
  • 打赏
  • 举报
回复
就是中文编码和ascII不兼容的问题
OenAuth.Core 2008-04-07
  • 打赏
  • 举报
回复
我编译运行了一下,发现“中国”两个字有问题,出现乱码,去掉后程序正常。原因应该是ASCII码不能和中文比较,调试代码如下:
#include <iostream.h>
void char2Hex(char c){
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<<' ';
}
int main(){
char str[] = "I love 中国";
for( size_t i=0; i <strlen(str); ++i )
char2Hex(str[i]);
cout<<endl;
return 0;
}
kesaihao862 2008-04-07
  • 打赏
  • 举报
回复
不懂 ,顶下. .  .
ttkk_2007 2008-03-30
  • 打赏
  • 举报
回复
要说友问题的话,就是“中国”这两个汉字的问题
字符好像没问题
lvbinandylau 2008-03-30
  • 打赏
  • 举报
回复

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 << ' ';
}


int main()
{
char str[] = "I love 中国";
for( size_t i=0; i <strlen(str); ++i )
char2Hex( str[i] );
cout<< endl;
}
lvbinandylau 2008-03-30
  • 打赏
  • 举报
回复

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 << ' ';
}


int main()
{
char str[] = "I love 中国";
for( size_t i=0; i <strlen(str); ++i )
char2Hex( str[i] );
cout<< endl;
}

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧