如何連接兩個字節原語以獲取java中的一個字符?我目前正在嘗試:連接字節以獲得字符
byte a = 0x01;
byte b = 0x02;
char c = (char) (a + b);
它給出0x03。我想要的答案是0x0102。
是否沒有簡單的方法來連接基元?我很驚訝沒有明顯的解決方案,因爲它看起來應該很容易。也許有,我只是沒有看到它。 :p
任何幫助,將不勝感激。 謝謝!
如何連接兩個字節原語以獲取java中的一個字符?我目前正在嘗試:連接字節以獲得字符
byte a = 0x01;
byte b = 0x02;
char c = (char) (a + b);
它給出0x03。我想要的答案是0x0102。
是否沒有簡單的方法來連接基元?我很驚訝沒有明顯的解決方案,因爲它看起來應該很容易。也許有,我只是沒有看到它。 :p
任何幫助,將不勝感激。 謝謝!
通過左移8位並添加。喜歡的東西,
byte a = 0x01;
byte b = 0x02;
char c = (char) ((a << 8) + b);
System.out.println(Integer.toHexString(c));
輸出是
102
正如在評論中指出(由@ChrisMartin),你可以按位或(和我將添加您可能還xor
)像
char c = (char) ((a << 8) | b);
and
char c = (char) ((a << 8)^b);
全部達到相同的結果。既然你應該Write Dumb Code我建議你使用你發現最容易理解的。
如果你不反對使用第三方庫,番石榴的Chars.fromBytes方法正是這樣做的:
char c = Chars.fromBytes(0x01, 0x02);
正確的表達是((a << 8) | (b & 0xff))
:
byte a = (byte) 0x81;
byte b = (byte) 0x82;
char c = (char) ((a << 8) | (b & 0xff));
字節,在使用時表達式被提升爲int
,並且當這完成時,它被符號擴展。其他答案中的表達式僅在b <= 127
時有效。
如果您爲該值添加1個字節,則其值爲-128
。 (Java中一個字節的範圍是-128到127),所以當你使用它來存儲無符號數時,你通常必須用b & 0xff
屏蔽一個字節。上述表達式中的a
不需要這樣做,因爲所有高位都從結果的16位字符中移出。
也可能按位或不添加。 '(a << 8)| b' – 2014-12-02 05:12:17
@ChrisMartin編輯。 – 2014-12-02 05:18:21