如何在字節數組中存儲位序列[]? 更詳細地:我有一個數組位數組到字節 - java
byte[] bytes;
如何將我的單個值(0和1)存儲在所述陣列的單個字節? 我在找這樣的東西:
bit[] bits = new bit[8];
bits[0] = 1;
bits[3] = 1;
bytes[3] = bits[];
我希望這是有道理的。謝謝
如何在字節數組中存儲位序列[]? 更詳細地:我有一個數組位數組到字節 - java
byte[] bytes;
如何將我的單個值(0和1)存儲在所述陣列的單個字節? 我在找這樣的東西:
bit[] bits = new bit[8];
bits[0] = 1;
bits[3] = 1;
bytes[3] = bits[];
我希望這是有道理的。謝謝
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;
}
一個布爾值可以用來表示一個位,但它佔用更多的內存。你可以使用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
你可以用'1 << something'來代替每個'Math.pow' –
@DavidWallace好的,剛剛意識到這是行得通的。去編輯我的答案... – PlasmaPower
這對我來說更像是一個記憶問題,而不是真假,所以一個布爾函數對我來說不會有效。 – Rakim
你可以把0和1成'String'和使用'Byte.parseByte'爲2的基數? –
我需要不時更改字節序列,所以它不會是一個好主意,因爲我將不得不重複重建序列,而不是僅將新值添加/交換到所需的索引posission – Rakim
@DavidWallace是的,但它是內存效率低下。 – PlasmaPower