浮点数到字节数组的转换
Float to byte array conversion
我们使用
float f= 3.5f ;
BitConverter.GetBytes(f);
它 returns 长度为 4 的字节数组。但我想知道这背后的数学原理。有人会教这个转换背后的数学吗?也感谢双重转换信息。
在幕后,它使用不安全的 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
.
我们使用
float f= 3.5f ;
BitConverter.GetBytes(f);
它 returns 长度为 4 的字节数组。但我想知道这背后的数学原理。有人会教这个转换背后的数学吗?也感谢双重转换信息。
在幕后,它使用不安全的 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
.