gpt4 book ai didi

c# - 将 c# float 转换为 IEEE 单精度浮点字节

转载 作者:行者123 更新时间:2023-11-30 14:48:57 25 4
gpt4 key购买 nike

我正在实现 RFC4506 (XDR) 在 c# 中。
c# (BitConverter.GetBytes) 中 float 的二进制格式是否使用 IEEE 标准?

如何将 c# 中的 float 转换为 IEEE 单精度 float 的 XDR 二进制格式,我可以这样做手动跑腿,但我想知道是否有现有的方法来执行此操作?

标准定义了 float 据类型“float”(32 位或4字节)。使用的编码是标准化的 IEEE 标准单精度 float [IEEE]。以下三个字段描述单精度 float :

  S: The sign of the number.  Values 0 and 1 represent positive and
negative, respectively. One bit.

E: The exponent of the number, base 2. 8 bits are devoted to this
field. The exponent is biased by 127.

F: The fractional part of the number's mantissa, base 2. 23 bits
are devoted to this field.

因此, float 描述为:

     (-1)**S * 2**(E-Bias) * 1.F

具体布局如下。

     +-------+-------+-------+-------+
|byte 0 |byte 1 |byte 2 |byte 3 | SINGLE-PRECISION
S| E | F | FLOATING-POINT NUMBER
+-------+-------+-------+-------+
1|<- 8 ->|<-------23 bits------>|
<------------32 bits------------>

正如数字的最高有效字节和最低有效字节是 0 和 3 一样,单精度 float 的最高位和最低位点号是 0 和 31。开始位(和最显着bit)S、E、F的偏移量分别为0、1、9。注意这些数字指的是位的数学位置,并且不是他们的实际物理位置(从介质到中)。

最佳答案

.NET 也使用 IEEE 表示法,因此 BitConverter.GetBytes 可为您提供所需的字节。

然而,它是一个半生不熟的标准,它只规定了位解释而不要求物理表示。 RFC 感染了上个世纪的 Unix 偏好,就像所有网络标准一样,字节顺序是大端。

在大多数可以运行 .NET 的机器上,您需要反转字节。因此:

public static byte[] XdrFloat(float value) {
byte[] bytes = BitConverter.GetBytes(value);
if (BitConverter.IsLittleEndian) Array.Reverse(bytes);
return bytes;
}

关于c# - 将 c# float 转换为 IEEE 单精度浮点字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39787049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com