Я ' m пытается преобразовать два байта в беззнаковый короткий, чтобы я мог получить фактическое значение порта сервера. Я основываюсь на этой спецификации протокола в разделе «Формат ответа». Я попытался использовать для этого BitConverter.ToUint16 () , но проблема в том, что он не дает ожидаемого значения. См. Ниже образец реализации:
int bytesRead = 0;
while (bytesRead < ms.Length)
{
int first = ms.ReadByte() & 0xFF;
int second = ms.ReadByte() & 0xFF;
int third = ms.ReadByte() & 0xFF;
int fourth = ms.ReadByte() & 0xFF;
int port1 = ms.ReadByte();
int port2 = ms.ReadByte();
int actualPort = BitConverter.ToUInt16(new byte[2] {(byte)port1 , (byte)port2 }, 0);
string ip = String.Format("{0}.{1}.{2}.{3}:{4}-{5} = {6}", first, second, third, fourth, port1, port2, actualPort);
Debug.WriteLine(ip);
bytesRead += 6;
}
Учитывая один образец данных, скажем, для двух байтовых значений, у меня 105 и 135, ожидаемое значение порта после преобразования должно быть 27015, но вместо этого я получаю значение 34665 с помощью BitConverter.
Я делаю это неправильно?