将包含 uint 和 floats 的 4 字节数据转换为 float
convert 4 bytes of data containing both uint & floats to float
我有一个数组,其中的数据是混合的格式。它包含两个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的评论。
相关文章:
- 将constexpr字节数组与缓冲区的一部分(指向数据的指针)进行比较
- 比较存储在 std::string 中的数据中的字节数
- 如何将数据复制到字节数组的某些部分
- 将数据流到字节数组中
- 从套接字到字节数组的读取数据中的意外字符
- 如何将变量二进制数据(作为字符串)转换为字节数组
- 将 cv::Mat 存储在字节数组中,以便将数据传输到服务器
- c++声明一个数据类型的字节数组,该数组存储在字符串中
- 将数据从字节数组(带零)传递到字符串流(字符串流)
- 如何在C++中表示二进制字节数组数据
- 将字节数组转换为标准数据类型
- 为什么我收不到字节数组中的数据?
- 如何构造一个字节数组,其中包含多个数据类型值
- 编辑存储在字节数组中的数据
- 从文件中读取字节数组的数据
- 如何将cv::mat标头和数据部分转换为单个字节数组
- 将字节数组数据映射到c#中的结构体
- 来自文件的数据 - 发送的字节数与 fread() 不匹配
- 将char转换为具有十六进制数据0x31的字节数组
- c++ String of Bytes转换为字节数据类型并计算字节数