2012-03-05 82 views
3

基本上,我想要的是將"123456"這樣的字符串轉換爲無符號字節數組:[1, 226, 64]。不過,我處處留心,我發現什麼是獲得2的補(簽字)字節數組[1, -30, 64]如何將表示一個整數的字符串轉換爲Java中的無符號字節數組?

byte[] array = new BigInteger("123456").toByteArray(); 
System.out.println(Arrays.toString(array)); 

OUTPUT:

[1, -30, 64] 

那麼,怎麼能夠在Java中做了什麼?我想輸出是:

[1, 226, 64] 

編輯:我知道字節只能容納多達127個,所以不是字節數組,我需要它是int數組。

+0

Java中沒有'unsigned byte'類型,因此您必須將其轉換爲'signed short/int'數組。 – Crozin 2012-03-05 21:24:22

回答

4

Java沒有無符號類型,因此您必須將值存儲在int數組中。

byte[] array = new BigInteger("123456").toByteArray(); 
int[] unsigned_array = new int[array.length]; 
for (int i = 0; i < array.length; i++) { 
    unsigned_array[i] = array[i] >= 0 ? array[i] : array[i] + 256; 
} 

相當簡單。

+0

+1哦,是的!這很好。謝謝 :) – 2012-03-05 21:30:23

2

Java沒有無符號字節,所以將它們轉換爲整數,好像他們是無符號,你需要和他們INT 0xFF按位(&):

byte[] array = new BigInteger("123456").toByteArray(); 
for (int i = 0; i < array.length; i++) { 
    System.out.println(0xFF & array[i]); 
} 

輸出:

1 
226 
64 

你不一定需要商店他們作爲一個int數組 - 它取決於你想要對他們做什麼...

相關問題