C/C++ 数据类型转换
# 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;
}
```
上列代码:从键盘读取十六进制值。 真棒。腻害{:6_208:}
页:
[1]