2017-06-12 204 views
1

Arduino関数が期待どおりに機能しません。オリジナルは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''は動作するはずです.32ビットの数値には '' long''や ''(u)int32_t''を使うべきです。 – cmdLP

+3

'sizeof(int)'を出力してください。どうしますか? – NathanOliver

+3

656649は0x000A0509と等しい。 0x0509 = 1289 – franji1

答えて

2

Arduinoのintと 'unsigned int種類は、あなたが使用する番号を保持するには小さすぎる、16ビットの値です。その値を保持するには、longまたはunsigned longタイプが必要です。これらはATmega(Arduino)アーキテクチャでは32ビット長です。

これらのさまざまなサイズのArduinoステムには、多くのプログラミング上の問題があります。現在、ほとんどのパーソナルコンピュータが64ビットであるため、Arduinoファミリの中心にあるマイクロコントローラは、Harvardアーキテクチャの8ビットマシンです8ビット・レジスタ。

+3

これは 'atoi()'ではなく 'atol()'または 'atoll()'を使いたいということです。しかし、 'ato *()'関数はエラーチェックをしません。 –

関連する問題