проблема преобразования 4-байтового массива в плавающее в C # - PullRequest
8 голосов
/ 29 ноября 2010

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

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

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

Ответы [ 2 ]

15 голосов
/ 29 ноября 2010

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

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
2 голосов
/ 29 ноября 2010
  1. Как насчет порядка байтов?Вы пытались изменить порядок слов?В Windows 533174.1 - это 98, 43, 2, 73.
  2. 4 байта - один (ToSingle), а не двойной.
...