c++ - 可以使用 union 将 char 数组转换为 float 吗?

标签 c++ arrays type-punning

<分区>

我想知道是否可以使用 union 从接收到的 char 数组中获取 float 。假设我定义了以下结构

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

如果我收到一个像这样编码 float 的字符数组(数字是编造的)

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;

最佳答案

在 C++ 中实现这一点的最简单方法是使用 reinterpret_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] << ' ';
std::cout << f << '\n';

关于c++ - 可以使用 union 将 char 数组转换为 float 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43788955/

相关文章:

c++ - 模板按值返回,指针在cpp/h

php - 递归地从多维数组中删除特定键

arrays - 迭代多个结构数组的最简单方法?

javascript - React 不会在 map 函数中渲染

c++ - C 和 C++ 中 union 的用途

c++ - 转换为仅由 char[] 组成的结构并从该数组读取是否定义良好?

c - 以“可能”在尽可能多的系统上工作的方式读取低指针位

c++ - Clang 编译 c++11 代码的不完整类型

c++ - 用函数返回值初始化一个 std::string,有拷贝吗?

android - "dlopen failed: is 32-bit instead of 64-bit"仅在测试中