如何在C#中获取浮点数的IEEE 754二进制表示

Has*_*niH 21 c# floating-point binary ieee-754

我有一些单精度和双精度浮点数,我想写入并从字节[]中读取..Net中有什么东西可以用来将它们转换成32位和64位IEEE 754表示形式吗?

Han*_*ant 33

.NET Single和Double已经采用IEEE-754格式.您可以使用BitConverter.ToSingle()和ToDouble()将byte []转换为浮点,GetBytes()则反过来.


Mar*_*ell 8

如果您不想一直分配新数组(这是什么GetBytes),您可以使用unsafe代码直接写入缓冲区:

static void Main()
{
    Span<byte> data = stackalloc byte[20];
    GetBytes(0, data, 0);
    GetBytes(123.45F, data, 4);
    GetBytes(123.45D, data, 8);
}

static unsafe void GetBytes(float value, Span<byte> buffer, int offset)
    => MemoryMarshal.Cast<byte, float>(buffer.Slice(offset))[0] = value;
static unsafe void GetBytes(double value, Span<byte> buffer, int offset)
    => MemoryMarshal.Cast<byte, double>(buffer.Slice(offset))[0] = value;
Run Code Online (Sandbox Code Playgroud)