ASCII 字符转int
现在我们准备看看如何将 ASCII 字符代码转换为 int 格式。 & 运算符非常适合转换。 如果一个数字字符存储在 char 变量 aChar 中,从下表中我们看到所需的操作是
十六进制字符 |
ASCII码 |
对应的int |
0 |
0011 0000 |
0000 0000 0000 0000 0000 0000 0000 0000 |
1 |
0011 0001 |
0000 0000 0000 0000 0000 0000 0000 0001 |
2 |
0011 0010 |
0000 0000 0000 0000 0000 0000 0000 0010 |
3 |
0011 0011 |
0000 0000 0000 0000 0000 0000 0000 0011 |
4 |
0011 0100 |
0000 0000 0000 0000 0000 0000 0000 0100 |
5 |
0011 0101 |
0000 0000 0000 0000 0000 0000 0000 0101 |
6 |
0011 0110 |
0000 0000 0000 0000 0000 0000 0000 0110 |
7 |
0011 0111 |
0000 0000 0000 0000 0000 0000 0000 0111 |
8 |
0011 1000 |
0000 0000 0000 0000 0000 0000 0000 1000 |
9 |
0011 1001 |
0000 0000 0000 0000 0000 0000 0000 1001 |
a |
0110 0001 |
0000 0000 0000 0000 0000 0000 0000 1010 |
b |
0110 0010 |
0000 0000 0000 0000 0000 0000 0000 1011 |
c |
0110 0011 |
0000 0000 0000 0000 0000 0000 0000 1100 |
d |
0110 0100 |
0000 0000 0000 0000 0000 0000 0000 1101 |
e |
0110 0101 |
0000 0000 0000 0000 0000 0000 0000 1110 |
f |
0110 0110 |
0000 0000 0000 0000 0000 0000 0000 1111 |
上表:十六进制字符和对应的 int。 注意模式从“9”到“a”的变化。
十六进制数字
好吧,我们仍然有一个 8 位的值(四个高位为零),但我们稍后会处理这个问题。
接下来考虑上表中的字母十六进制数字。 该表仅显示了小写字母字符,但您在表 2.3 中看到低四位对于大写和小写字母字符是相同的。 我们可以使用相同的 & 运算来获得这四个位,然后将结果加 9:
aChar = 0x09 + (aChar & 0x0f);
从 8 位 char 类型到 32 位 int 类型的转换是通过 C 中的类型转换完成的。
生成的程序如下列代码所示。 请注意,我们使用 printf 函数以十六进制和十进制显示结果存储值。 从存储的 int 格式到十六进制显示的转换留作练习(练习 3-13)。
/*
* convertHex.c
* Asks user to enter a number in hexadecimal
* then echoes it in hexadecimal and in decimal.
* Assumes that user does not make mistakes.
* Bob Plantz - 4 June 2009
*/
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int x;
unsigned char aChar;
printf("Enter an integer in hexadecimal: ");
fflush(stdout);
x = 0; // initialize result
read(STDIN_FILENO, &aChar, 1); // get first character
while (aChar != ’\n’) // look for return key
{
x = x << 4; // make room for next four bits
if (aChar <= ’9’)
{
x = x + (int)(aChar & 0x0f);
}
else
{
aChar = aChar & 0x0f;
aChar = aChar + 9;
x = x + (int)aChar;
}
read(STDIN_FILENO, &aChar, 1);
}
printf("You entered %#010x = %i (decimal)\n\n", x, x);
return 0;
}
上列代码:从键盘读取十六进制值。
|