我正在尝试编写一个设备清单,这些设置可以实现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?
答案 0 :(得分:3)
使用包含union和一个标志的struct来指示union的哪个成员处于活动状态
typedef struct {
typedef union {
int ival;
float fval;
} data;
enum {
INT,
FLOAT;
} which;
} dataContainer;
答案 1 :(得分:1)
使用union
,但是您需要一种方法来判断该值是整数还是浮点数。
union number {
int i;
float f;
};