Arduino如何打印未签名的长数据

时间:2015-11-26 22:41:57

标签: string arduino println unsigned-long-long-int

我正在尝试在串行监视器上打印unsigned long long数据但是  Serial.println()由于不是字符串变量而无法正常工作。

所以我在互联网上搜索将unsigned long long转换为String。我提出了一些解决方案,但没有一个能够解决问题。例如;

uint64_t pipe = 0x12345ABCD9LL;//lets assume the data is 12345ABCD9 hexadecimal
char buf[50];
sprintf(buf, "%llu", pipe);
Serial.println( buf );

此代码不起作用。我也尝试了"%lu""%lld"

我想知道我的pipe值是多少。在这种情况下,我想在串行监视器上看到12345ABCD9。还有其他办法吗?我在等你的回复。非常感谢你。

编辑:

当我使用"%lu"时,我在屏幕上看到878361817变量(这不是我想要的)。但其他人只是空,空

3 个答案:

答案 0 :(得分:2)

如何将其分为上半部分和下半部分?

试试这个(未经测试):

uint64_t pipe = 0x12345ABCD9LL;//lets assume  the data is 12345ABCD9 hexadecimal
char buf[50];
if(pipe > 0xFFFFFFFFLL) {
  sprintf(buf, "%lX%08lX", (unsigned long)(pipe>>32), (unsigned long)(pipe&0xFFFFFFFFULL));
} else {
  sprintf(buf, "%lX", (unsigned long)pipe);
}
Serial.println( buf );

答案 1 :(得分:1)

使用此代码段也可以完成此操作;有点玩指针..

  uint64_t pipe = 0x12345ABCD9ULL;//lets assume  the data is 12345ABCD9 hexadecimal
  uint32_t *p = (uint32_t *)&pipe;
  Serial.printf ("%X%08X\n", p[1], p[0]);

答案 2 :(得分:0)

根据Arduino language reference,您可以打印HEX值,如下所示:

Serial.println(pipe, HEX)

另一个选择是创建一个联合类型来将long long破坏为两个long:

union longlong {
    long a;
    long b;
}

然后将单独的长片引用为:

longlong i = pipe;
Serial.println(i.a, HEX);
Serial.println(i.b, HEX);

查看联合技巧explained at hackaday