首页 > 解决方案 > 将原始字节转换为浮点数会改变字节的值吗?C#

问题描述

我将原始字节转换为单个精度浮点数,就像我一直为 uint32s 和 int32s 所做的一样,没有问题。问题是这似乎改变了浮点数的实际值。我读过 C# 将 32 位浮点数视为 IEEE754,并且 IEEE754 计算器同意我作为十六进制字符串返回的原始字节,而不是 C# 对浮点数的解释。有人可以解释我的误解以及如何解决它吗?我认为这不是字节顺序问题,因为无论我在纸上尝试什么模式,我似乎都无法使字节匹配。

Score = (Single)(packetBytes[1187] << 24 | packetBytes[1186] << 16 | packetBytes[1185] << 8 | packetBytes[1184]); // strange result
HexStringScore = BitConverter.ToString(new byte[4] { packetBytes[1187], packetBytes[1186], packetBytes[1185], packetBytes[1184] }); // expected result
HexStringCSharpFloat = BitConverter.ToString(BitConverter.GetBytes(Score)); // strange result

HexStringScore:45-F2-5B-BC(原始数据)

分数:1.173511E9(错误,根据计算器编号应为 7755.466796875)

HexStringCSharpFloat: B7-E4-8B-4E

总之为什么我的应用程序不能理解 45-F2-5B-BC 是 7755.466796875

标签: c#floating-pointbit-manipulationendiannessieee-754

解决方案


推荐阅读