2017-08-31 329 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--); 
    } 
}