可以用于将char数组转换为float的联合吗?

时间:2017-05-04 17:08:49

标签: c++ arrays type-punning

我想知道是否可以使用联合来从接收的char数组中获取浮点数。假设我已经定义了以下结构

typedef union {
  float f;
  char c[4];
} my_unionFloat_t;

如果我收到一个编码像这样的浮点数的字符数组(数字组成)

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;

1 个答案:

答案 0 :(得分:1)

在C ++中实现这一目标的最简单方法是使用reinterprete_cast

unsigned char data[4] = {32,45,56,88};
float f = reinterpret_cast<const float&>(data);
const unsigned char* ch =  reinterpret_cast<const unsigned char*>(&f);
for(int i=0; i<4; ++i)
    std::cout << +ch[i] << ' ';
cout << f << '\n';