请考虑以下示例:
char a = '4';
int c = (int)a; // this gives the hex value of '4' which is 0x34
但我希望结果4
为整数。这该怎么做?只需转换Hex2Dec
?
答案 0 :(得分:12)
int i = a - '0';
printf("%d",i);
数字0
到9
的字符值是连续的,您可以在此处使用它,如上所示。
答案 1 :(得分:6)
表示十进制数字的字符按数字顺序排列在ASCII空间中。
'0'
是ASCII 0x30 '1'
是ASCII 0x31 '2'
是ASCII 0x32 这意味着您只需从角色中减去'0'
即可获得所需的值。
char a = ...;
if (a >= '0' && a <= '9')
{
int digit = a - '0';
// do something with digit
}
答案 2 :(得分:2)
USe
char a = '4'; //ASCII value of '4' is 52
int b = a - '0'; // ASCii value of '0' is 48 so 52-48 will return 4.
printf("%d", b); //It will print 4.
答案 3 :(得分:2)
0
的ASCII值[以十六进制] == 30。9
的ASCII值[以十六进制] == 39。character
值设为integer
,只需从0
变量本身中减去char
的ASCII值。差异将与值相同。
有关详细信息,请查看ASCII表here。
例如,
char cInput = `4`;
int iInput;
iInput = cInput - `0`;
printf("as integer = %d\n", iInput);
将打印4
。
答案 4 :(得分:2)
ASCII转换为范围a-f,A-F或0-9中字符的值可以使用switch语句完成,如以下函数中所使用的那样:
unsigned char convert(unsigned char ch) {
unsigned char value;
switch (ch) {
case 'A' :
case 'B':
case 'C':
case 'D':
case 'E':
case 'F': value = ch + 10 - 'A'; break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f': value = ch + 10 - 'a'; break;
default: value = ch - '0';
}
return value;
}
答案 5 :(得分:0)
关于你的陈述的一些澄清
这给出十六进制值'4'
做:
char a = '4';
将ASCII值'4'(映射到0x34)放入一个字节变量'a'。
行动:
int c = (int) a;
被称为铸造。它的作用是将'a'(一个字节)内的值复制到'c'中的值(4个字节)。因此,'c'中的值将为0x00000034(其他3个字节初始化为零)。
最后,当您想要打印值时,您可以以任何您想要的方式进行打印。 的printf( “%d”,C); 会给你十进制值 - 52,而 的printf( “%X”,C); 会给你十六进制值。
干杯,