проблема преобразования 4-байтового массива в float в C#

Я использую C# и считываю массив байтов с некоторого контроллера и преобразую их в свои типы. все значения (int,string) OK, кроме значений float. Значение, которое предполагается получить, равно 533174.1. но при чтении массива

byteArr[0]=2
byteArr[1]=73
byteArr[2]=98
byteArr[3]=43

получение некоторого значения тарабарщины. Я использовал System.BitConverter.ToDouble(bytesArr,0) и другие методы, но безуспешно. пожалуйста помочь. Спасибо, Игаль.

2 ответов


ваши байты выходят word-swapped. Эта функция должна преобразовать ваш массив байтов в поплавки правильно:

static float ToFloat(byte[] input)
{
    byte[] newArray = new[] { input[2], input[3], input[0], input[1] };
    return BitConverter.ToSingle(newArray, 0);
}

ToFloat(new byte[]{2,73,98,43}) == 533174.1

  1. Как насчет endianess? Вы пробовали изменить порядок слов? В windows 533174.1 - 98, 43, 2, 73.
  2. 4 байта-это один (ToSingle), а не двойной.