Как получить двоичное представление IEEE 754 с плавающей точкой в ​​C # - PullRequest
19 голосов
/ 22 ноября 2010

У меня есть несколько чисел с плавающей запятой одинарной и двойной точности, которые я хочу записывать и читать из байта []. Есть ли что-нибудь в .Net, которое я могу использовать, чтобы преобразовать их в и из их 32 и 64-битных представлений IEEE 754?

Ответы [ 2 ]

32 голосов
/ 22 ноября 2010

.NET Single и Double уже в формате IEEE-754. Вы можете использовать BitConverter.ToSingle () и ToDouble () для преобразования byte [] в число с плавающей запятой, GetBytes () для обратного.

7 голосов
/ 01 июля 2014

Если вы не хотите постоянно выделять новые массивы (что делает 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;
    }
}
...