2010-11-09 31 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也。

相關問題