2017-06-12 172 views
1

Arduino atoi()函数未按预期工作。原件是656649,但是当转换为字符串时,它打印1289.可能发生什么?谢谢!Atoi()函数不起作用Arduino

void setup() { 
    Serial.begin(9600); 
} 

void loop() { 
    String BT1 = "656649" 
    Serial.print(" String BT1: "); 
    Serial.print(BT1); // OUTPUT: 656649 
    char charBuf[50]; 
    BT1.toCharArray(charBuf, 50) ; 
    Serial.print("Char buff: "); // OUTPUT: 656649 
    Serial.print(charBuf); 
    intBT1 = atoi(charBuf); 
    Serial.print(" intBT1: "); //OUTPUT: 1289 
    Serial.print(intBT1); 
} 
+4

也许arduino是16位系统。 ''atol''应该可以工作,你应该使用''long''或者''(u)int32_t''作为32位数字; – cmdLP

+3

打印出'sizeof(int)',你会得到什么? – NathanOliver

+3

656649等于0x000A0509; 0x0509等于1289 – franji1

回答

2

Arduino的int和“unsigned int类型是16位值,太小,无法容纳您使用的号码。您需要一个longunsigned long类型来保存该值;这些在ATmega(Arduino)架构中长32位。

Arduino的许多编程问题都来自于这些不同的尺寸 - 现在大多数个人计算机都是64位,很容易忘记Arduino家族核心的微控制器是哈佛架构的8位机器8位寄存器。

+3

这意味着你要使用'atol()'或'atoll()'而不是'atoi()'。但请注意,'ato *()'函数不会进行错误检查。 –