在位操作中它代表什么?

时间:2010-11-09 10:55:16

标签: java bit-manipulation

这些代码行代表什么?

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]);

其中header是一个字节[12],方法unisigned_int是:

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

感谢您的回答!

2 个答案:

答案 0 :(得分:2)

 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位值。随着Mark Byers观察到的错误。

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

将-128到127之间的整数(即一个字节)转换为以整数表示的8位无符号整数。相当于

 return b & 255

答案 1 :(得分:1)

它将字节转换为整数。

我认为这里有一个错误:

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

此外,不是撰写x * 256x * 65536x * 16777216而是写x << 8x << 16x << 24更清楚。< / p>