将二进制固定点的byte []转换为浮点值

时间:2011-01-05 12:47:16

标签: c# fixed-point

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

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

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

所要求的格式的更多细节:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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