如何存储可初始化为整数或浮点数的通用四字节

时间:2018-01-26 01:38:36

标签: c byte

我正在尝试编写一个设备清单,这些设置可以实现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?

2 个答案:

答案 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;
};