gpt4 book ai didi

c++ - 在这种情况下 atoi 到底发生了什么?

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

我是 C 的新手,我很好奇为什么我在这种情况下遇到 atoi 问题。我觉得我不理解一些基本的东西。这是我的示例代码:

int main()
{
char last[3];
last[2]='\0';
uint16_t num1;
uint16_t num2;

// I read in num1 and num2 from a file and do an integer operation on them. bigarray is the file contents. bigarray[i] is a integer
num1=bigarray[i] - 1;
num2=bigarray[i+1] - 1;
last[0]=(char)num1;
last[1]=(char)num2;
printf("%i\n:", atoi(last));
}

当我分别打印出 last[0]last[1] 时,它会给我正确的值。当我打印出 atoi(last) 时,它会给我 0

为什么 atoi 在这种情况下给我 0,我该如何解决?

最佳答案

atoi 需要 ASCII 字符,所以如果数组是,假设 last[0] = 1last[1] = 2 , 它不会找到任何字符,如果它是 last[0] = '1'last[1] = '2' 比它会打印 12.

在这种特殊情况下,您可以通过以下方式实现:

last[0]='0' + num1;
last[1]='0' + num2;

(假设num1num2在0-9之间)

简短的编辑来解释这个想法:

'0'(0x30) 到 '9'(0x39) 的 ascii 值是连续的,因此将 0 添加到'0' (0x30) 将为您提供 '0'(0x30) 并将 2 添加到 '0' (0x30) 会给你 '2'(0x32)

关于c++ - 在这种情况下 atoi 到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792931/

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