为何在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
相关产品推荐
相关产品推荐

