2013-04-02 409 views
0

我转换的符号int送过来的Arduino丝为多个字节,所以我做了以下为int:转换从int到字节数组然后回到使用上的Arduino的atoi和itoa用于传输

下面的代码是调试我的实现,您可以复制到Arduino IDE中查看打印输出。

我不能理解的是,itoa如何创建一个大于声明大小的数组,该大小不能被sizeof()检测到。我声明的数组大小为,但itoa使用大小为的数组来存储其结果!

Serial.println("|----START DEBUG------|"); 
int Sensor1Data=-32760; 
Serial.print("Sensor1Data: ");Serial.println(Sensor1Data); 
byte Sensor1CharMsg[2]; 

Serial.println("|----STAGE 2------|"); 
Serial.print("Array Size b4 itoa: ");Serial.println(sizeof(Sensor1CharMsg)); 
itoa(Sensor1Data,(char*)Sensor1CharMsg,10); 
Serial.print("Array Values up to 10 elements: ");Serial.write(Sensor1CharMsg,10); Serial.println(""); 
Serial.print("Array Size a4tr itoa: ");Serial.println(sizeof(Sensor1CharMsg)); 

Serial.println("||||||| ARRAY OUTPUT|||||||"); 
Serial.print("Sensor1CharMsg[0]): "); Serial.println(Sensor1CharMsg[0]); 
Serial.print("Sensor1CharMsg[1]): "); Serial.println(Sensor1CharMsg[1]); 
Serial.print("Sensor1CharMsg[2]): "); Serial.println(Sensor1CharMsg[2]); 
Serial.print("Sensor1CharMsg[3]): "); Serial.println(Sensor1CharMsg[3]); 
Serial.print("Sensor1CharMsg[4]): "); Serial.println(Sensor1CharMsg[4]); 
Serial.print("Sensor1CharMsg[5]): "); Serial.println(Sensor1CharMsg[5]); 
Serial.println("|||||||END ARRAY OUTPUT|||||||"); 

传输后:

int Sensor2Data = atoi((char*)Sensor1CharMsg); 
Serial.print("Sensor2Data: ");Serial.println(Sensor2Data); 

结果

|----START DEBUG------| 
Sensor1Data: -32760 
|----STAGE 2------| 
Array Size b4 itoa: 2 
-32760 
Array Size a4tr itoa: 2 
||||||| ARRAY OUTPUT||||||| 
Sensor1CharMsg[0]): 45 
Sensor1CharMsg[1]): 51 
Sensor1CharMsg[2]): 50 
Sensor1CharMsg[3]): 55 
Sensor1CharMsg[4]): 54 
Sensor1CharMsg[5]): 48 
|||||||END ARRAY OUTPUT||||||| 

传输

Sensor2Data: -32760 

回答

4

您将要覆盖存储,调用未定义的行为之后。

此外,itoa()并没有完全创建一个“字节数组”,它会创建一个字符串。名字的意思是“整数到ASCII”。 The documentation说:

调用方负责提供足够的存储[...]

最后一个字符串的长度由strlen()计算,而不是sizeof

+0

'sizeof'在数组上工作得很好(但不是函数数组参数,它们实际上是变相的指针) –

+0

但是对于想要使用'strlen'的字符串。因为'strlen'始终工作(对于零终止的字符串)和'sizeof'只在极少数情况下工作。对于任何其他数组,您都希望显式地存储大小并使用它,而不是依赖'sizeof'。 – rioki

+0

@BenVoigt Huh?我在谈论字符串,而不是数组。 – unwind

相关问题