You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在atoi(strtol同理)转换前要给数组元素加'0'?

为什么要给数组元素加'0'?

先看你提供的代码:

array[0] = digitalRead(pin1);
array[1] = digitalRead(pin2);
array[2] = digitalRead(pin3);
array[3] = digitalRead(pin3); // 这里重复读取了pin3,大概率是笔误
array[4] = digitalRead(pin4);
array[5] = digitalRead(pin5);
array[6] = digitalRead(pin6);
array[7] = digitalRead(pin7);

for(i=0; i<8 ; i++){
 data[i] = array[i] + '0';
}

input = atoi(data);

核心原因和ASCII编码直接相关:

  • digitalRead() 返回的是整数0或1(对应引脚的低/高电平),但 atoi() 只认字符形式的数字(比如'0'、'1'这类)。
  • ASCII表中,字符'0'的十进制值是48,'1'是49。把整数0加'0',得到的48正好是字符'0'的ASCII码;整数1加'0'得到49,对应字符'1'的ASCII码。这样处理后,data数组里就变成了合法的数字字符串(比如"10011010"),atoi()才能正确将其转换成十进制整数。

如果去掉'0',data数组里存的是整数0和1,对应的ASCII字符是空字符(NUL)和标题开始符(SOH)——这些都不是数字字符。atoi()遇到非数字开头的内容时,会直接返回0,这就是你看到转换失败的原因。

另外提个小细节:代码里array[3]重复读取了pin3,应该是要读取另一个引脚(比如pin8)的笔误吧?

内容的提问来源于stack exchange,提问作者yellowsub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:10:29