Bilibili 发表于 2022-5-24 23:04:24

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;
}
```

上列代码:从键盘读取十六进制值。

ultradebug 发表于 2022-5-25 00:55:34

真棒。腻害{:6_208:}
页: [1]
查看完整版本: C/C++ 数据类型转换