将包含 uint 和 floats 的 4 字节数据转换为 float

convert 4 bytes of data containing both uint & floats to float

本文关键字:数据 字节数 转换 float 字节 uint 包含 floats      更新时间:2023-10-16

我有一个数组,其中的数据是混合的格式。它包含两个unsigned int &浮点数(每个都存储在4字节的数据中)。

我想将每个4字节的数据转换为浮点数。然而,这些方法都不适合我。例如,

union
{
   DWORD i;
   float f;
} u; 

这个方法不起作用。reinterpret_cast也不为float。

我得到的数据是这样的。

{ 1, 8, 1.00000, -1.000000 }

我有一个指向内存的uint32_t指针

DWORD value = *(uint_pointer)给我正确的1,8,而不是其他的。使用类型转换浮点数会导致1.00000 &-1.00000被正确识别,而不是其他两个。

我希望结果是

{ 1.00000, 8.00000, 1.00000, -1.00000 }

我看了SO所有以前的答案,但没有一个是可靠的,因此我再次发布这篇文章以获得一些想法。

谢谢

您需要知道哪些4字节的片段是float s,哪些4字节的片段是uint s。如果你不知道,就没有办法转换它们,不幸的是,它们只是具有模糊含义的32位。但是,如果您确实知道第三个值是float,例如,您可以使用float v3 = ((float *)uint_pointer)[3]获得它。另外,你也可以查看我之前的文章中的详细解释:使用AudioFileServices在iOS 6中进行颗粒合成

编辑:如果您不知道包含您的值的是4字节== sizeof(DWORD) == sizeof(float),并且作为一般的良好实践,您可以转换为u*并从联合访问它。这样,您就可以使用编译器的内存对齐知识,因此v3 = ((u *)uint_pointer)[3].f更安全,请参阅@LightnessRacesInOrbit的评论。