2

我正在通过套接字读取一些数据。整数数据类型没有问题, System.BitConverter 方法可以正确处理转换。(所以我认为没有需要担心的 Endian 问题?)

但是,BitConverter.ToDouble 不适用于数据的浮点部分......源规范对我来说有点低级,但谈到了在更重要的方向上具有正字节偏移的二进制定点表示和低位方向的负字节偏移。

我所做的大部分研究都是针对 C++ 或处理正弦和余弦的完整定点库,这对于这个问题来说听起来有点矫枉过正。有人可以帮我用一个 C# 函数从一个字节数组的 8 个字节产生一个浮点数,比如说,一个 -3 字节的偏移量吗?

根据要求提供格式的更多详细信息:

定点数据的有符号数值应使用二进制二进制补码表示法。对于定点数据,每个数据参数的值应根据参考字节定义。参考字节定义了一个八位字段,测量单位在 LSB 位置。参考字节的 LSB 值为 1。字节偏移应由一个有符号整数定义,该整数指示数据元素的最低有效字节相对于参考字节的位置。数据元素的 MSB 代表符号位。参数绝对值的 MSB 和最高有效字节的 MSB 之间的位位置应与符号位的值相等。

浮点数据应表示为符合 IEEE ANSI/IEEE Std 754-2008 的二进制浮点数。(这句话来自不同的部分,可能是一个红鲱鱼)。

4

2 回答 2

1

好的,在向当地专家询问了一些关于源材料的问题后,事实证明 CodeInChaos 走在了正确的轨道上……如果值为 8 字节,偏移量为 -3 字节,那么我可以使用 BitConverter.ToInt64 / 256^ 3,如果它是 4 个字节,偏移量为 -1 字节,那么 BitConverter.ToInt32 / 256 将产生正确的答案。我想这意味着 XXX 签名的 BitConverter.ToXXX 足够聪明,可以处理二进制补码计算!

感谢那些试图提供帮助的人,我认为这不会太复杂,但是从参考文档的措辞中得到 256 的偏移量是非常令人困惑的:-)

于 2011-01-07T12:14:40.637 回答
0

System.BitConverter 的工作速度非常慢,所以如果性能对您很重要,我建议您自己将字节转换为 int(通过逻辑移位)。另外,请指定在您的协议中发送的确切格式浮点数。

于 2011-01-05T12:50:16.263 回答