c# - 将原始字节转换为浮点数会改变字节的值吗?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
解决方案
推荐阅读
- visual-studio-2017 - CSX 输出目录不存在错误
- javascript - 将 JavaScript XML DOM 对象转换为具有特定结构的对象
- r - 在列表中合并两个 df 一对多 - R
- sql - SQLite 触发器中的条件用于继承
- java - 如何从 Json 格式的 POST 请求中获取对象列表
- talend - Talend:如何更改所有作业的上下文变量?
- python - Python Flask 提交按钮问题
- kubernetes - 重启 master 和丢失节点上的 pod
- windows - fsutil - setCaseSensitiveInfo 后不支持请求
- android-espresso - Android.Espresso:如何在 SP 中检查 TextView 的文本大小?