2017-08-31 118 views
0

我使用Arduino UNO(Arduino 1.8.3)。Arduino中的Serial.print uint64_t

這是我的代碼:

void setup() { 
    Serial.begin(115200); 
} 
void loop() { 
    uint64_t num = 9223372036854775807; 
    Serial.print(num); 
    delay(1000); 
} 

這是錯誤消息:

退出狀態1

超載的呼叫 '打印(uint64_t中&)' 不明確

我該如何解決這個錯誤?

+0

請編輯您的問題,包括了*全*和*完整*錯誤輸出。包括可能的信息說明。最好把它全部複製並粘貼到你的問題中(作爲文本),不作任何修改。請花一些時間[閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask)。 –

回答

1

您可以在header中看到print()根本沒有uint64_t的超負荷。

你必須以某種方式編碼數量衆多,通過分解成兩個獨立的uint32_t例如:

uint64_t num = 9223372036854775807; 

uint32_t low = num % 0xFFFFFFFF; 
uint32_t high = (num >> 32) % 0xFFFFFFFF; 

Serial.print(low); 
Serial.print(high); 

很明顯,你將不得不重組它們的另一端。

+0

這裏有一個補丁版本,它增加了對64位整數的支持http://forum.arduino.cc/index.php/topic,143584.0.html –

+0

哦,謝謝。 我得到了兩個數字,一個是2147483646,另一個是2147483647. 但我如何重新組合他們? –

0

這就是我該怎麼做的。這很麻煩,但它完成了工作。從串行控制檯

輸出:9223372036854775807

void print_uint64_t(uint64_t num) { 

    char rev[128]; 
    char *p = rev+1; 

    while (num > 0) { 
    *p++ = '0' + (num % 10); 
    num/= 10; 
    } 
    p--; 
    /*Print the number which is now in reverse*/ 
    while (p > rev) { 
    Serial.print(*p--); 
    } 
}