【发布时间】:2017-10-02 23:47:58
【问题描述】:
我想知道是否可以使用联合从接收到的 char 数组中获取浮点数。假设我定义了以下结构
typedef union {
float f;
char c[4];
} my_unionFloat_t;
如果我收到一个像这样编码浮点数的 char 数组(数字是组成的)
data[4] = {32,45,56,88};
我可以执行以下操作吗?
my_unionFloat_t c2f;
c2f.c[0] = data[0];
c2f.c[1] = data[1];
c2f.c[2] = data[2];
c2f.c[3] = data[3];
float result = c2f.f;
【问题讨论】:
-
是的,如果发件人尊重 IEEE 和字节序。但是
memcpy(&the_float,the_string_data,sizeof(float))实现了同样的目标 -
请注意,在 C++ 中使用 unon 进行类型双关是非法的
-
建议的 dup 未使用
char数组。您应该确保使用unsigned char(并且不要尝试初始化 4 元素数组的 5 个元素)。 -
注意:不需要硬编码 4. 使用
char c[sizeof (float)];BTW,最好使用unsigned char- 更少的复杂性。 -
@chux 你的意思是我的工会定义中的
char c[sizeof(float)],不是吗?关于使用unsigned char也在同一个定义中对吧?
标签: c++ arrays type-punning