我正在尝试从 C 中的常量浮点中检索原始数据字节。这样做是为了创建一个可读的常量字节数组。这可以在下面看到。
#define FLOAT_TO_BYTES(value) \
(uint8_t)(value), (uint8_t)(value << 8), \
(uint8_t)(value << 16), (uint8_t)(value << 24)
const uint8_t byteArray[] = {
FLOAT_TO_BYTES(11.4)
};
问题是我无法使用指针或任何类型的代码块。我知道上面的方法不起作用,因为你无法移动浮点值。我尝试过使用 union ,但也无法使其发挥作用。任何帮助将不胜感激!
最佳答案
以下是如何使用 union 获取字节:
#include <stdio.h>
union float_bytes{
float f;
char b[sizeof(float)];
};
int main()
{
union float_bytes fb = { 1.1 };
for(int i=0; i<sizeof(float);i++)
printf("%hhx\n", fb.b[i]);
}
您也可以简单地执行以下操作:
#include <stdio.h>
int main()
{
float f = 1.1;
for(int i=0; i<sizeof(float);i++)
printf("%hhx\n", ((char*)&f)[i]);
}
始终允许通过字符指针检查任何内容。
如果你真的愿意,你可以将 (char*) 的转换放入宏中 并传入一个浮点指针,或者您可以在宏中创建一个临时复合文字以避免显式浮点变量:
#include <stdio.h>
#define FLOAT_BYTES(Float) ((char*)(&(float){Float}))
int main()
{
for(int i=0; i<sizeof(float);i++)
printf("%hhx\n", FLOAT_BYTES(1.1)[i]);
}
(复合文字的生命周期是其最近的封闭 block 的生命周期。)
关于c - 在 C 中使用 #define 获取常量浮点值的原始数据字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41862038/