返回

字符串转整数:深入解读 atoi 的规则与实现

闲谈

从十进制到其他进制:进制转换的奥秘

在计算机的世界里,数据以不同的进制形式存储和处理,十进制是我们最熟悉的,但计算机内部却偏爱二进制,而十六进制也在编程中扮演着重要角色。让我们一起探索进制转换的奥秘,了解不同进制之间的转换规则和技巧。

从十进制到其他进制

十进制使用 0 到 9 这 10 个数字表示数值,但计算机更青睐二进制,只使用 0 和 1 两个数字。十六进制则采用了 0 到 9 和 A 到 F 这 16 个字符。

要将十进制数字转换为其他进制,我们可以采用以下方法:

二进制转换:

将十进制数不断除以 2,记录余数,余数从下往上排列,即可得到二进制数。

例如:将十进制数 13 转换为二进制:

13 / 2 = 61
6 / 2 = 30
3 / 2 = 11
1 / 2 = 01

将余数从下往上排列:1101,即为二进制表示。

十六进制转换:

将十进制数不断除以 16,记录余数,余数从下往上排列,其中 10-15 分别用 A-F 表示。

例如:将十进制数 255 转换为十六进制:

255 / 16 = 1515 (F)
15 / 16 = 015 (F)

将余数从下往上排列:FF,即为十六进制表示。

从其他进制到十进制

二进制转十进制:

将二进制数每位乘以 2 的相应次幂,然后相加即可得到十进制数。

例如:将二进制数 1101 转换为十进制:

1 * 2^3 = 8
1 * 2^2 = 4
0 * 2^1 = 0
1 * 2^0 = 1

8 + 4 + 0 + 1 = 13,即为十进制表示。

十六进制转十进制:

将十六进制数每位乘以 16 的相应次幂,然后相加即可得到十进制数。

例如:将十六进制数 FF 转换为十进制:

F * 16^1 = 240
F * 16^0 = 15

240 + 15 = 255,即为十进制表示。

C 语言中的 atoi 函数

C 语言中提供了 atoi 函数,可以将字符串转换成十进制整数。该函数遵循以下规则:

  1. 忽略前导空格。
  2. 记录正负号。
  3. 提取数字字符串。
  4. 转换成整数。

代码示例:

#include <stdio.h>
#include <stdlib.h>

int main() {
  char str[] = "123abc";
  int num = atoi(str);
  printf("转换后的整数:%d\n", num);

  return 0;
}

输出:123

练习题

  1. 实现一个函数,将字符串转换成十六进制整数。
  2. 实现一个函数,将字符串转换成二进制整数。
  3. 实现一个函数,将十进制整数转换成字符串。
  4. 实现一个函数,将十六进制整数转换成字符串。
  5. 实现一个函数,将二进制整数转换成字符串。

常见问题解答

  1. 十进制和十六进制有什么区别?
    十进制使用 10 个数字,而十六进制使用 16 个字符(0-9、A-F)。
  2. 如何将十进制数 255 转换为二进制数?
    255 / 2 = 127 余 1
    127 / 2 = 63 余 1
    63 / 2 = 31 余 1
    31 / 2 = 15 余 1
    15 / 2 = 7 余 1
    7 / 2 = 3 余 1
    3 / 2 = 1 余 1
    1 / 2 = 0 余 1
    将余数从下往上排列:11111111
  3. atoi 函数会忽略什么字符?
    atoi 函数会忽略前导空格、正负号后面的非数字字符。
  4. 如何将字符串 "123" 转换成十六进制整数?
    调用 strtol 函数,传入字符串、指针和进制(16),即可得到十六进制整数。
  5. 如何将二进制数 1101 转换成十进制数?
    1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 13