我有一个数组,其中包含格式混合的数据。它包含无符号整数和&浮点数(全部存储在每个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 }
我看了所有以前的答案,但没有一个可靠地工作,因此我再次发布这个以获得一些想法。
由于
答案 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的评论。