Преобразование байтового массива в число с плавающей запятой 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);