3

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

所以我在互联网上搜索转换unsigned long longString. 我想出了一些解决方案,但没有一个有效。例如;

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变量时(这不是我想要的)。但其他他们只是 null ,空

4

3 回答 3

3

把它分成上半部和下半部怎么样?

试试这个(未测试):

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 );
于 2015-11-27T00:36:48.857 回答
1

根据Arduino 语言参考,您可以像这样打印 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);

请参阅hackaday 中解释的联合技巧。

于 2018-03-18T20:39:55.037 回答
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]);
于 2020-01-04T18:56:33.240 回答