Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何存储可以初始化为整数或浮点的通用四字节_C_Byte - Fatal编程技术网

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

C 如何存储可以初始化为整数或浮点的通用四字节,c,byte,C,Byte,我正在尝试写一个设置列表,让memcpy'ed到位。这将是一个非常大的列表(100多个项目),开发人员将花时间进行调整。我希望能够将其中任何一个初始化为4字节浮点或4字节整数 我想要的是: {.settingName="setting 1", .value=0.5f}, {.settingName="setting 2", .value=0.5f}, {.settingName="setting 3", .value=300}, 因为开发人员要花时间调整这些值,所以我不能只初始化0x3f000

我正在尝试写一个设置列表,让memcpy'ed到位。这将是一个非常大的列表(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);
}
#包括
#包括
#包括
uint8_t数据[sizeof(浮动)];
int main(){
浮动f=0xFFFFFF;
memcpy(数据和f、尺寸(f));

对于(int i=0;i使用一个
并集
,但是您需要一个方法来判断该值是整数还是浮点

union number {
    int i;
    float f;
};

使用一个
联合
,然后需要一个方法来判断该值是整数还是浮点

union number {
    int i;
    float f;
};

使用包含联合和标志的结构,该标志指示联合的哪个成员处于活动状态

typedef struct {
    typedef union {
        int ival;
        float fval;
    } data;
    enum {
        INT,
        FLOAT;
    } which;
} dataContainer;

使用包含联合和标志的结构,该标志指示联合的哪个成员处于活动状态

typedef struct {
    typedef union {
        int ival;
        float fval;
    } data;
    enum {
        INT,
        FLOAT;
    } which;
} dataContainer;

重要的问题是你为什么要这样做?这个问题的答案通常表明你在解决根本问题时采取了错误的方法。为什么不使用联合,然后只做
{.settingName=“setting 1”,.value_f=0.5f},{.settingName=“setting 3”,.value_i=300}
?重要的问题是你为什么要这样做?这个问题的答案通常表明你在解决根本问题时采取了错误的方法。为什么不使用联合,然后只做
{.settingName=“setting 1”,.value\u f=0.5f},{.settingName=“setting 3”,.value\u i=300}
?有趣,您介意添加一个示例吗?(Main)有趣,您介意添加一个示例吗?(Main)