2012-04-05 78 views
1

試圖瞭解此代碼段的數學。提供總是8位數的令牌。它輸入一個類型爲long的類。令牌被分解成單獨的字節以通過流發送。雙重類型鑄造令牌

long token = 85838276; 

byte cp[] = { 
      1, 0, 0, 0, 0 
      }; 

cp[4] = (byte)(int)token; // not sure what would become of token 
cp[3] = (byte)(int)(token >> 8); 
cp[2] = (byte)(int)(token >> 16); 
cp[1] = (byte)(int)(token >> 24); 

我理解類型轉換(字節)部分,但沒有(字節)(int)在一起。長型的令牌是否必須一次減少一種簡單類型?你能不能省略(int)並得到相同的結果?

爲了清晰起見,命令是重要的還是僅從cp [4]寫入cp [1]。 我意識到cp [4]中的標記不會等於原始值,因爲字節類型可容納的最大值是127.是否有可能在原始標記到達目的地後重新創建它?

最後我想在php中重新創建這個。我知道一個字符串已經是一個字節流。每個字符發送將是一個字節。我需要發送一個字符串,每個字符都等於它所表示的整數值。比如一個41

更新: 所以根據Louis Wasserman的回答,當類型轉換爲字節時,只保留最後一個字節。

Token in binary: 101000111011100100111000100 // cp[4] = 11000100 

Token shifted 08: 1010001110111001001 // cp[3] = 11001001 

Token shifted 16: 10100011101 // cp[2] = 00011101 

Token shifted 24: 101 // cp[1] = 101 

回答

3

據我所知,(byte) (int)相當於(byte)在這方面。

對於所有雙重演員來說都不是這樣,但在這裏看起來確實如此。他們都在「縮小」投射轉換。

+0

那麼當你輸入一個大於該類型所允許的最大值的數字時會發生什麼? – jmm 2012-04-05 18:24:44

+0

對於整數類型,它得到_truncated_:所以'(int)longValue'只需要'longValue'的最後四個字節,'(byte)intValue'接受'intValue'的最後一個字節。所以'(byte)(int)longValue'只是'longValue'的最後一個字節。 – 2012-04-05 18:29:31