gpt4 book ai didi

c++ - 如何将浮点文字转换为相同位模式的无符号整数

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:11 25 4
gpt4 key购买 nike

在我无法控制的标题中,有这样的内容:

typedef union {
char * v_charp;
int v_int;
float v_float;
} value_t;

typedef struct var {
char *name;
value_t value;
} variable;

#define VARIABLE_DEF(Name, Value) {Name, {(char*)Value}}

他们希望在我的代码中我会做这样的事情:

variable my_variables[2] = {
VARIABLE_DEF("Variable 1", 1),
VARIABLE_DEF("Variable 2", 2)
};

写这篇文章的人显然没有考虑到您可能想要使用浮点文字来初始化 union 。所以我需要弄清楚如何将文字 float 转换为具有相同位模式的整数。如果我可以使用中间变量,那就很容易了:

float tmp;

variable my_variables[2] = {
VARIABLE_DEF("Variable 1", tmp = 1.1f, *((unsigned int *)(&tmp))),
VARIABLE_DEF("Variable 2", tmp = 2.2f, *((unsigned int *)(&tmp)))
};

但是你不能在结构初始化器中使用变量。我还能做什么?

最佳答案

怎么样

variable my_variables[2] = {
VARIABLE_DEF("Variable 1", ((value_t){.v_float = 1.1f}.v_int)),
VARIABLE_DEF("Variable 2", ((value_t){.v_float = 2.2f}.v_int)),
};

(未经测试)

转念一想,定义一个比 VARIABLE_DEF 更灵活的替代方案并在需要时使用它怎么样?

有点像

#define VARIABLE_DEF_ALT(Name, Value) {Name, {Value}}
#define VARIABLE_DEF_ALT2(Name, Field, Value) {Name, {.Field = Value}}

variable my_variables[2] = {
VARIABLE_DEF_ALT("Variable 1", .v_float = 1.1f),
VARIABLE_DEF_ALT2("Variable 2", v_float, 2.2f),
};

应该可以。

或者直接跳过宏:

variable my_variables[2] = {
{"Variable 1", {.v_float = 1.1f}},
{"Variable 2", {.v_float = 2.2f}},
};

— 这实际上是宏,还是您正在为本次讨论简化更复杂的案例?

关于c++ - 如何将浮点文字转换为相同位模式的无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com