浮动变量到十六进制 C++ arduino

问题描述

我在玩 Arduino 时遇到了一个问题。我目前使用的是第一个版本的 Arduino IDE (v 1.18.49.0)。

问题是我不知道如何将浮点值转换为十六进制。我正在尝试使用早先在 StackOverflow 上出现的各种解决方案,但似乎没有一个我有用。 我最好的尝试是:

char data[9];
float a = 3.141592654;
sprintf(data,"%x",*(unsigned int*)&a);
Serial.println(data);

预期结果: 40490fdb

实际结果: fdb

使用相同的代码,但稍加修改由 g++ 编译给出了预期的结果

#include <stdio.h>

int main(int argc,char** argv)
{
    char data[9];
    float a = 3.141592654;
    sprintf(data,*(unsigned int*)&a);
    printf(data);
    return 0;
}

为什么结果不同?也许有更好的方法来做到这一点? 提前致谢!

解决方法

如果您确定要查看 4 字节变量的位模式,您应该更喜欢这样的转换:

 sprintf(data,"%08lx",*(uint32_t*)&a);

(这里无关紧要,但一般来说,前导零有助于提高可读性)

[编辑以包含@timemage 的提示]