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

C# 如何在C中获得浮点的IEEE 754二进制表示#,c#,binary,floating-point,ieee-754,C#,Binary,Floating Point,Ieee 754,我有一些单精度和双精度浮点,我想写入和读取字节[]。在.Net中是否有任何东西可以用来将它们转换为32位和64位IEEE 754表示形式?Net Single和Double已经是IEEE-754格式。您可以使用BitConverter.ToSingle()和ToDouble()将字节[]转换为浮点,使用GetBytes()将字节转换为浮点。使用跨距更新当前.NET/C\ static void Main() { Span data=stackalloc字节[20]; GetBytes(0,数据,

我有一些单精度和双精度浮点,我想写入和读取字节[]。在.Net中是否有任何东西可以用来将它们转换为32位和64位IEEE 754表示形式?Net Single和Double已经是IEEE-754格式。您可以使用BitConverter.ToSingle()和ToDouble()将字节[]转换为浮点,使用GetBytes()将字节转换为浮点。

使用跨距更新当前.NET/C\

static void Main()
{
Span data=stackalloc字节[20];
GetBytes(0,数据,0);
GetBytes(123.45F,数据,4);
GetBytes(123.45D,数据,8);
}
静态无效GetBytes(浮点值、跨度缓冲区、整数偏移)
=>MemoryMarshal.Cast(缓冲区切片(偏移量))[0]=值;
静态不安全的void GetBytes(双精度值、跨度缓冲区、整数偏移)
=>MemoryMarshal.Cast(缓冲区切片(偏移量))[0]=值;

如果不想一直分配新数组(这是
GetBytes
所做的),可以使用
safe
code直接写入缓冲区:

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

static unsafe void GetBytes(float value, byte[] buffer, int offset)
{
    fixed (byte* ptr = &buffer[offset])
    {
        float* typed = (float*)ptr;
        *typed = value;
    }
}
static unsafe void GetBytes(double value, byte[] buffer, int offset)
{
    fixed (byte* ptr = &buffer[offset])
    {
        double* typed = (double*)ptr;
        *typed = value;
    }
}

如果不使用GetBytes(),我们如何做到这一点。我是说使用forloops@SriramSatti请参见我的回答:与创建阵列相比,这种方式有什么意义?我感兴趣的是内存中发生了什么,GC做了什么等等@Backwards\u Dave很简单:一个人分配一个数组,一个人不分配!GC所做的一切将完全取决于该数组何时不可访问,但是:它将需要在某个时刻被收集。请注意,在当前的.NET/C#中,您可以在此处使用
Span
API,在不存在任何
不安全的
和任何数组分配的情况下(使用
stackalloc
Span)执行整个操作-请参见编辑