Что это означает в битовых операциях? - PullRequest
1 голос
/ 09 ноября 2010

Что означают эти строки кода?

payloadType = header[1] & 127;
sequenceNumber = unsigned_int(header[3]) + 256*unsigned_int(header[2]);
timeStamp = unsigned_int(header[7])
               + unsigned_int(header[6])
               + 65536*unsigned_int(header[5])
               + 16777216*unsigned_int(header[4]);

Где заголовок - это байт [12], а метод unisigned_int таков:

private int unsigned_int(byte b) {
    if(b >= 0) {
        return b;
    }
    else {
        return 256 + b;
    }
}

Спасибо за ответ!

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010
 payloadType = header[1] & 127;

Снять бит знака с заголовка 1 / получить нижние 7 бит

sequenceNumber = unsigned_int(header[3]) + 256*unsigned_int(header[2]);

извлечение 16-битного значения из заголовка

 timeStamp = unsigned_int(header[7])
           + unsigned_int(header[6])
           + 65536*unsigned_int(header[5])
           + 16777216*unsigned_int(header[4]);

извлечение 32-битного значения из заголовка. С ошибкой, замеченной Марком Байерсом.

private int unsigned_int(byte b) {
     if(b >= 0) {
         return b;
     }
     else {
         return 256 + b;
     }
}

преобразует целое число от -128 до 127 (то есть, байт) в 8-битное целое число без знака, представленное как целое число Эквивалент

 return b & 255
1 голос
/ 09 ноября 2010

Это преобразование байтов в целые числа.

Я думаю, здесь есть ошибка:

+ 256 * unsigned_int(header[6])
  ^^^^^

Также вместо записи x * 256, x * 65536, x * 16777216 было бы более понятно написать x << 8, x << 16, x << 24.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...