返回
字符串转整数:深入解读 atoi 的规则与实现
闲谈
2023-11-29 22:31:01
从十进制到其他进制:进制转换的奥秘
在计算机的世界里,数据以不同的进制形式存储和处理,十进制是我们最熟悉的,但计算机内部却偏爱二进制,而十六进制也在编程中扮演着重要角色。让我们一起探索进制转换的奥秘,了解不同进制之间的转换规则和技巧。
从十进制到其他进制
十进制使用 0 到 9 这 10 个数字表示数值,但计算机更青睐二进制,只使用 0 和 1 两个数字。十六进制则采用了 0 到 9 和 A 到 F 这 16 个字符。
要将十进制数字转换为其他进制,我们可以采用以下方法:
二进制转换:
将十进制数不断除以 2,记录余数,余数从下往上排列,即可得到二进制数。
例如:将十进制数 13 转换为二进制:
13 / 2 = 6 余 1
6 / 2 = 3 余 0
3 / 2 = 1 余 1
1 / 2 = 0 余 1
将余数从下往上排列:1101,即为二进制表示。
十六进制转换:
将十进制数不断除以 16,记录余数,余数从下往上排列,其中 10-15 分别用 A-F 表示。
例如:将十进制数 255 转换为十六进制:
255 / 16 = 15 余 15 (F)
15 / 16 = 0 余 15 (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 函数,可以将字符串转换成十进制整数。该函数遵循以下规则:
- 忽略前导空格。
- 记录正负号。
- 提取数字字符串。
- 转换成整数。
代码示例:
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "123abc";
int num = atoi(str);
printf("转换后的整数:%d\n", num);
return 0;
}
输出:123
练习题
- 实现一个函数,将字符串转换成十六进制整数。
- 实现一个函数,将字符串转换成二进制整数。
- 实现一个函数,将十进制整数转换成字符串。
- 实现一个函数,将十六进制整数转换成字符串。
- 实现一个函数,将二进制整数转换成字符串。
常见问题解答
- 十进制和十六进制有什么区别?
十进制使用 10 个数字,而十六进制使用 16 个字符(0-9、A-F)。 - 如何将十进制数 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 - atoi 函数会忽略什么字符?
atoi 函数会忽略前导空格、正负号后面的非数字字符。 - 如何将字符串 "123" 转换成十六进制整数?
调用 strtol 函数,传入字符串、指针和进制(16),即可得到十六进制整数。 - 如何将二进制数 1101 转换成十进制数?
1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 13