gpt4 book ai didi

c - 为什么字符串转数字要减去 '0'?

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:02 25 4
gpt4 key购买 nike

我是 C 的新手,我一直在寻找 C 中的自定义 函数,它将字符串转换为整数,我遇到了这个算法,除了一部分之外,它非常有意义。 -'0' 在这一行 n = n * 10 + a[c] - '0'; 上到底做了什么?

    int toString(char a[]) {
int c, sign, offset, n;

if (a[0] == '-') { // Handle negative integers
sign = -1;
}

if (sign == -1) { // Set starting position to convert
offset = 1;
}
else {
offset = 0;
}

n = 0;

for (c = offset; a[c] != '\0'; c++) {
n = n * 10 + a[c] - '0';
}

if (sign == -1) {
n = -n;
}

return n;
}

算法在我找到它的地方没有解释,here .

最佳答案

减去 '0' 的原因是十进制数字的字符代码点从 '0' 开始按顺序排列,没有间隙。也就是说,'5'的字符编码比'0'的字符编码大5; '6' 的字符代码比 '0' 的字符代码大 6,依此类推。因此,从另一个数字的代码中减去零代码 '0' 会产生相应数字的值。

这种排列对于 ASCII 码、EBSDIC、十进制数字的 UNICODE 码等都是正确的。对于 ASCII 码,数字代码如下所示:

'0' 48
'1' 49
'2' 50
'3' 51
'4' 52
'5' 53
'6' 54
'7' 55
'8' 56
'9' 57

关于c - 为什么字符串转数字要减去 '0'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26080093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com