5月27日 21:17

ASCII 码中数字字符怎么和整数互相转换?

数字字符和 ASCII 码怎么互相转换?

数字字符 '0'-'9' 的 ASCII 值是 48-57,连续排列。核心转换就一个公式:数字字符的 ASCII 值 = 数字值 + 48(即 ord('0'))。

字符转整数: 用字符减去 '0' 的 ASCII 值即可。

c
int num = ch - '0'; // C/Java int num = ord(ch) - ord('0') # Python

整数转字符: 数字加上 '0' 的 ASCII 值。

c
char ch = num + '0'; // C/Java char = chr(num + ord('0')) # Python

判断是否为数字字符:

c
// C/Java if (ch >= '0' && ch <= '9') // Python if '0' <= ch <= '9'

为什么是减 '0' 而不是减 48?

语义清晰。ch - '0' 直接表达"求这个字符代表的数字",而 ch - 48 需要读者心算 48 是什么。另外,ASCII 并非唯一编码标准,用 '0' 做基准在 EBCDIC 等编码下逻辑不变(虽然值不同),代码可移植性更好。

实战:手写字符串转整数

不用 parseInt / int(),手动实现:

python
def str_to_int(s): num = 0 for c in s: if not ('0' <= c <= '9'): break num = num * 10 + (ord(c) - ord('0')) return num

每一轮把已有结果左移一位(乘 10),再加上新数字位。

追问:负数怎么处理?

跳过开头的 '-',按正数转换,最后取反即可。注意 "-0" 和溢出的边界情况,这是面试中常见的 follow-up。

标签:ASCII