2014-02-28 128 views
0

如何在字節數組中存儲位序列[]? 更詳細地:我有一個數組位數組到字節 - java

byte[] bytes; 

如何將我的單個值(0和1)存儲在所述陣列的單個字節? 我在找這樣的東西:

bit[] bits = new bit[8]; 
bits[0] = 1; 
bits[3] = 1; 
bytes[3] = bits[]; 

我希望這是有道理的。謝謝

+0

你可以把0和1成'String'和使用'Byte.parseByte'爲2的基數? –

+1

我需要不時更改字節序列,所以它不會是一個好主意,因爲我將不得不重複重建序列,而不是僅將新值添加/交換到所需的索引posission – Rakim

+0

@DavidWallace是的,但它是內存效率低下。 – PlasmaPower

回答

1
void setBit(int[] array, int index, boolean value) { 
    int x = index/32; 
    int y = index % 32; 
    int mask = 1 << y; 
    if (value) { 
     array[x] |= mask; 
    } 
    else { 
     array[x] &= (0xFFFFFFFF^mask); 
    } 
} 

boolean getBit(int[] array, int index) { 
    int x = index/32; 
    int y = index % 32; 
    int mask = 1 << y; 
    return (array[x] & mask) != 0; 
} 
0

一個布爾值可以用來表示一個位,但它佔用更多的內存。你可以使用bitwise運營商,以節省內存,這裏有一個例子:

int n = 0; 
n |= 1 << 1; // Set bit 1 to true, n is 2 
n |= 1 << 3; // Set bit 3 to true, n is 10 
bool b0 = n & (1 << 3) > 0; // True 
n &= 1 << 3; // Set bit 3 to false, n is 2 
bool b1 = n & (1 << 1) > 0; // True 
bool b2 = n & (1 << 2) > 0; // False 
bool b3 = n & (1 << 3) > 0; // False 
+0

你可以用'1 << something'來代替每個'Math.pow' –

+0

@DavidWallace好的,剛剛意識到這是行得通的。去編輯我的答案... – PlasmaPower

+1

這對我來說更像是一個記憶問題,而不是真假,所以一個布爾函數對我來說不會有效。 – Rakim