Arduino 如何打印 unsigned long long 数据
Arduino How can I print the unsigned long long data
我正在尝试在串口监视器上打印 unsigned long long
数据,但是
Serial.println()
不工作,因为不是字符串变量。
所以我在网上搜索将unsigned long long
转换为String
。我提出了一些解决方案,但其中 none 有效。例如;
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 ,空
把它分成上半部分和下半部分怎么样?
试试这个(未测试):
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 );
根据 Arduino language reference,您可以像这样打印 HEX 值:
Serial.println(pipe, HEX)
另一种选择是创建联合类型以将 long long 分解为两个 long:
union longlong {
long a;
long b;
}
然后将单独的 long 引用为:
longlong i = pipe;
Serial.println(i.a, HEX);
Serial.println(i.b, HEX);
查看合并技巧 explained at hackaday。
这个片段也可以做到;有点玩指针..
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]);
我正在尝试在串口监视器上打印 unsigned long long
数据,但是
Serial.println()
不工作,因为不是字符串变量。
所以我在网上搜索将unsigned long long
转换为String
。我提出了一些解决方案,但其中 none 有效。例如;
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 ,空
把它分成上半部分和下半部分怎么样?
试试这个(未测试):
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 );
根据 Arduino language reference,您可以像这样打印 HEX 值:
Serial.println(pipe, HEX)
另一种选择是创建联合类型以将 long long 分解为两个 long:
union longlong {
long a;
long b;
}
然后将单独的 long 引用为:
longlong i = pipe;
Serial.println(i.a, HEX);
Serial.println(i.b, HEX);
查看合并技巧 explained at hackaday。
这个片段也可以做到;有点玩指针..
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]);