【问题标题】:Arduino How can I print the unsigned long long dataArduino如何打印无符号长长数据
【发布时间】:2015-11-26 22:41:56
【问题描述】:

我正在尝试在串行监视器上打印 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 变量(这不是我想要的)。但其他他们只是 null ,空

【问题讨论】:

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


    【解决方案1】:

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

    试试这个(未测试):

    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 );
    

    【讨论】:

    • 不幸的是,什么都没有消失。感谢您的宝贵时间
    【解决方案2】:

    根据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

    【讨论】:

      【解决方案3】:

      用这个sn-p也可以;有点玩指针..

        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]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-22
        • 2016-04-03
        • 1970-01-01
        • 1970-01-01
        • 2018-06-13
        • 2020-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多