vc十六进制ASCII码问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 12:18:30
//这是一个将字符转换为相应的十六进制值的函数
//功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1
char CSCommTestDlg::ConvertHexChar(char ch)
{
if((ch>='0')&&(ch<='9'))
return ch-0x30;
else if((ch>='A')&&(ch<='F'))
return ch-'A'+10;
else if((ch>='a')&&(ch<='f'))
return ch-'a'+10;//?
else return (-1);
}
带问号的那条语句ch,a,和10分别是什么含义?a代表的是字符,还是ASCII码?还有这条语句的整体含义。谢谢!!!

0到9: ASCII 值是 0x30...0x39,所以 ch - 0x30 就正好是正确的权。

A到F: 用 ch 的 ASCII 值减去 A 的 ASCII 值,就相当于 A到F 变成了 0到5,要加 10 才是正确的权,因为十六进制里 A=10...F=15,所以就有了 ch - 'A' + 10 这个算法。这里的 'A' 是 ASCII 值。

a到f: 同上。

a---字符
'a'----ASCII码