Преобразование байтового массива в число с плавающей запятой C#

Я попробовал приведенный ниже код C# для преобразования из шестнадцатеричного литерала в число с плавающей запятой и получить правильный результат. Я хочу вместо этого ввести байтовый массив и преобразовать его в число с плавающей запятой, но не могу получить правильный результат.

0x4229ec00 это текущий формат. Мне это нужно в byte array отформатировать что-то вроде...

new byte[]{ 0x01, 0x04, 0x01, 0x60, 0x00, 0x02, 0x70, 0x29}; //current output 42.48

Код выглядит так:

byte[] bytes = BitConverter.GetBytes(0x4229ec00);
float myFloat = floatConversion(bytes);

public float floatConversion(byte[] bytes)
{
    float myFloat = BitConverter.ToSingle(bytes, 0);
    return myFloat;
}

Любая помощь будет принята с благодарностью. Спасибо!

2 ответа

Решение

Вы можете изменить свою функцию преобразования с плавающей запятой, как показано ниже

    public float floatConversion(byte[] bytes)
    {
        if (BitConverter.IsLittleEndian)
        {
            Array.Reverse(bytes); // Convert big endian to little endian
        }
        float myFloat = BitConverter.ToSingle(bytes, 0);
        return myFloat;
    }

плавать (Single) является 4-байтовым значением;

Ваше тестовое значение 0x4229ec00 содержит 4 байта: 0x42, 0x29, 0xEC, 0x00

Процессоры x86 используют обратный порядок байтов (Little Endian), поэтому правильный байтовый массив

0x00, 0xEC, 0x29, 0x42

Код

// Original array
Byte[] data = new Byte[] {0x42, 0x29, 0xEC, 0x00};
// 42.48047
// If CPU uses Little Endian, we should reverse the data 
float result = BitConverter.ToSingle(BitConverter.IsLittleEndian? data.Reverse().ToArray() : data, 0);
Другие вопросы по тегам