例如,把字符串"DF"转换成整数 223 char x2c (char *what) { char digit; digit = ((what[0] > 'A') ? ((what[0] & 0xdf) + 10) : (what[0] - '0')); digit *= 16; digit += ((what[1] > 'A') ? ((what[1] & 0xdf) + 10) : (what[1] - '0')); return digit; }
其中最tricky的就是what[0] & 0xdf;原因在于,ascii编码中同一个大小写字母的值总是相差32,也就是小写字母的第6位总为1,大写字母的第6位总为0,执行& 0xdf 以后总是把小写字母转换为大写的。