gpt4 book ai didi

c++ - 将包含 int 和 float 的 4 个字节的数据转换为 float

转载 作者:行者123 更新时间:2023-11-30 02:57:39 25 4
gpt4 key购买 nike

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

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

union
{
DWORD i;
float f;
} u;

这个方法不行。 reinterpret_cast 也不会 float 。

我的数据是这样的

{ 1, 8, 1.00000, -1.000000 }

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

DWORD value = *(uint_pointer) 正确地给出了 1、8 而不是其他值。使用类型转换 float 会导致 1.00000 和 -1.00000 被正确识别,但不会正确识别其他两个。

我基本上想要的结果是

{ 1.00000, 8.00000, 1.00000, -1.00000 }

我查看了 SO 之前的所有答案,但没有一个可靠地工作,因此我再次发布此内容以获取一些想法。

谢谢

最佳答案

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

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

关于c++ - 将包含 int 和 float 的 4 个字节的数据转换为 float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14370872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com