【发布时间】:2018-01-26 01:38:35
【问题描述】:
我正在尝试编写一个设置列表,以使 memcpy 就位。这将是一个非常大的列表(100 多个项目),开发人员将花时间进行调整。我希望能够将其中任何一个初始化为 4 字节浮点或 4 字节整数。
我想要什么:
{.settingName="setting 1", .value=0.5f},
{.settingName="setting 2", .value=0.5f},
{.settingName="setting 3", .value=300},
因为开发人员会花时间调整这些值,所以我不能只初始化 0x3f000000 来代替 0.5f
我也无法将其存储为浮点数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
uint8_t data[sizeof(float)];
int main(){
float f = 0xFFFFFFFF;
memcpy(data, &f, sizeof(f));
for(int i=0; i<sizeof(data); i++){
printf("%x ", data[sizeof(data)-1-i]);
}
uint32_t integer = (uint32_t) f;
printf("\n%x ", integer);
}
因为这会输出: 4f 80 0 0 整数:0
这在 C 中可能吗?
【问题讨论】:
-
重要的问题是你为什么想要这个?此问题的答案通常表明您在解决根本问题时采用了不正确的方法。
-
为什么不用使用联合,然后就用
{ .settingName = "setting 1", .value_f = 0.5f }, { .settingName = "setting 3", .value_i = 300 }?