浮点到字节数组转换

时间:2017-10-26 21:16:10

标签: c# arrays floating

我们使用

float f= 3.5f ;
BitConverter.GetBytes(f);

它返回长度为4的字节数组。但我想知道这背后的数学。有人会教这个转换背后的数学吗?此外,双重转换信息表示赞赏。

1 个答案:

答案 0 :(得分:1)

在幕后,它使用不安全的C风格指针将底层的32位值复制到一个32位数组(byte[4]):

int rawBits = *(int*)&value;
byte[] bytes = new byte[4];
fixed(byte* b = bytes)
    *((int*)b) = rawBits;
return bytes;

结果取决于体系结构,只要字节的顺序与发生复制的机器的内存字节顺序(字节顺序)相匹配。

例如,如果32位rawBits值为0xAABBCCDD,并且它在内存中表示为AA BB CC DD,则该数组将包含0xAA, 0xBB, 0xCC, 0xDD。如果内存中的表示形式为DD CC BB AA,则数组将包含0xDD, 0xCC, 0xBB, 0xAA