我正在用c#实现RFC4506 (XDR)。
c#中的浮点二进制格式(
如何将转换为XDR 二进制格式,以获得一个IEEE单精度浮点数?我可以手动完成这项工作,但我想知道是否存在现有的方法来完成此操作?
该标准定义了浮点数据类型"float"(32位或4字节)。所使用的编码是规范化的IEEE单精度浮点数标准[IEEE]。以下三个字段描述了单精度浮点数:
因此,浮点数由以下内容描述:
正如一个数字的最高位和最低位是0和3一样,单精度浮点数的最高位和最低位分别为0和31。S、E和F的开始位(也是最高位)偏移量分别为0、1和9。请注意,这些数字是指位的数学位置,而不是它们实际物理位置(这些位置因介质而异)。
c#中的浮点二进制格式(
BitConverter.GetBytes
)是否使用IEEE标准?如何将转换为XDR 二进制格式,以获得一个IEEE单精度浮点数?我可以手动完成这项工作,但我想知道是否存在现有的方法来完成此操作?
该标准定义了浮点数据类型"float"(32位或4字节)。所使用的编码是规范化的IEEE单精度浮点数标准[IEEE]。以下三个字段描述了单精度浮点数:
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.
因此,浮点数由以下内容描述:
(-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一样,单精度浮点数的最高位和最低位分别为0和31。S、E和F的开始位(也是最高位)偏移量分别为0、1和9。请注意,这些数字是指位的数学位置,而不是它们实际物理位置(这些位置因介质而异)。
float
本身不是单精度吗? - Jakub Jankowski