问题描述
我在玩 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 的提示]