【问题标题】:Float to byte array conversion浮点数到字节数组的转换
【发布时间】:2017-10-26 21:16:10
【问题描述】:

我们使用

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

它返回长度为 4 的字节数组。但我想知道这背后的数学原理。有人会教这种转换背后的数学吗?还赞赏双重转换信息。

【问题讨论】:

标签: c# arrays floating


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2017-03-25
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多