首页 文章

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

提问于
浏览
18

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

2 回答

  • 32

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

  • 7

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

    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;
        }
    }
    

相关问题