转换包含uint和amp;的4个字节的数据漂浮漂浮

时间:2013-01-17 01:34:54

标签: c++

我有一个数组,其中包含格式混合的数据。它包含无符号整数和&浮点数(全部存储在每个4字节数据中)。

我想将每个4字节数据转换为浮点数。但是,这些方法都不适用于我。例如。

union
{
   DWORD i;
   float f;
} u; 

此方法不起作用。 reinterpret_cast也没有浮动。

我的数据是这样的。

{ 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 }

我看了所有以前的答案,但没有一个可靠地工作,因此我再次发布这个以获得一些想法。

由于

1 个答案:

答案 0 :(得分:3)

您需要知道哪些4个字节的延伸是float s,哪个4个字节的延伸是uint s。如果你不知道,没有办法转换它们,不幸的是,它们只有32位,含义模糊。但是,如果您确实知道第三个值是float,则可以使用float v3 = ((float *)uint_pointer)[3]获取它。另外,您可以在上一篇文章中查看我冗长的解释:Granular Synthesis in iOS 6 using AudioFileServices

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