Arduino中的Serial.print uint64_t

时间:2017-08-31 06:17:48

标签: c++ arduino-uno

我使用Arduino UNO(Arduino 1.8.3)。

这是我的代码:

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

这是错误消息:

  

退出状态1

     

调用重载'print(uint64_t&)'是不明确的

如何解决此错误?

2 个答案:

答案 0 :(得分: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); 

显然,你必须在另一端重新组合它们。

答案 1 :(得分:1)

我就是这样做的。它很乱,但它完成了工作。

串行控制台的输出: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--);
  }
}