Вот мое предположение о драке ... в некоторых случаях повторение или консолидация того, что говорили другие, но в контексте.
Исходные данные имеют формат 16 бит с фиксированной запятой. Это имеет меньший диапазон, чем float или double, но имеет большую точность, чем 16-битная плавающая точка. Здесь 8 битов со знаком задаются для целой части числа, а 8 бит - для десятичной части.
Для тех, кто не знаком с представлением с фиксированной запятой, это похоже на сохранение денежных значений в виде целых «центов» при делении на 100 для отображения «долларов».
LSB = (0XFF & (int)ipPacket[index]);
double temp = LSB/256.0;
В приведенном выше примере первый байт превращается в десятичную часть значения с использованием деления с плавающей запятой. LSB / 256.0 выдаст двойное значение между 0,0 и 0,99609375.
MSB = (byte)(0XFF & (byte)ipPacket[index+1]);
Предполагается, что приведенный выше код нормализует второй байт. Если ipPacket является массивом byte [], то это ничего не делает, так как бит знака уже в порядке. ipPacket [index + 1] уже был бы между -128 и 127. Код имеет смысл, только если ipPacket - это не байтовый массив, и даже в этом случае он немного переусердствовал в своем приведении, так как & 0XFF будет повышать значение до в любом случае целое число ... прямо перед преобразованием его обратно в байт.
Учитывая ненужное (двойное) приведение в последней строке исходного кода, я подозреваю, что некоторые из вышеперечисленных также могут быть ненужными.
Если ipPacket является массивом byte [], тогда:
MSB = ipPacket[index+1];
Должно быть в порядке. Если ipPacket не является массивом byte [], тогда все равно должно быть достаточно:
MSB = (byte)(0xFF & ipPacket[index+1]);
Как говорили другие, этот последний бит затем объединяет целые числа и десятичные части:
double output = (double)(MSB + temp);
ConvCurrentPhaseR[doubleArrayIndex] = (double)(output);
Хотя важно отметить, что десятичная часть добавляется к целой числовой части. Это означает, что MSB = -1 и LSB = 128 приведут к -0,5, а не к -1,5, как можно было изначально ожидать.