2010-11-09 65 views
1

这些代码行代表什么?在位操作中它代表什么?

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

凡头是一个byte [12]和方法unisigned_int是这样的:

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

感谢您的回答!

+1

什么问题?代码以相当明显的方式处理这些比特。你在问什么? – 2010-11-09 11:02:15

+0

感谢大家回答和编辑我的文章。我在stackoverflow上很新,我正慢慢地进入它的氛围。我也为我的英语道歉。 – soneangel 2011-06-06 09:06:14

+0

Paul,我的问题完全是关于这个明显的时尚(对于我来说,我是新手):unsigned_int(header [3])+ 256 * unsigned_int(header [2]) – soneangel 2011-06-06 09:08:31

回答

2
payloadType = header[1] & 127; 

地带的符号咬下头1 /获取底部7个比特

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

提取报头中的32位值中提取16位的值。有马克·拜尔斯观察到的错误。

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

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

return b & 255 
1

它将字节转换为整数。

我认为这里有一个错误:

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

,而不是写x * 256x * 65536x * 16777216它会更清楚地写x << 8x << 16x << 24也。

相关问题