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
那麼當你輸入一個大於該類型所允許的最大值的數字時會發生什麼? – jmm 2012-04-05 18:24:44
對於整數類型,它得到_truncated_:所以'(int)longValue'只需要'longValue'的最後四個字節,'(byte)intValue'接受'intValue'的最後一個字節。所以'(byte)(int)longValue'只是'longValue'的最後一個字節。 – 2012-04-05 18:29:31