2017-06-12 173 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 *()'函數不會進行錯誤檢查。 –