我有一个BitSet,需要将其转换为Byte[]。然而,使用BitSet.toByteArray()时,我没有得到正确的输出。我尝试将Byte[]转换为其二进制形式,以检查Bitset和Byte[]的二进制形式是否相似。
public static void generate() {
BitSet temp1 = new BitSet(64);
for (int i = 0; i < 64; i++) {
if(i % 8 != 0 && i < 23) {
temp1.set(i, true);
}
}
StringBuilder s = new StringBuilder();
for (int i = 0; i < 64; i++) {
s.append(temp1.get(i) == true ? 1 : 0);
}
System.out.println(s);
byte[] tempByteKey1 = temp1.toByteArray();
for (byte b : tempByteKey1) {
System.out.print(Integer.toBinaryString(b & 255 | 256).substring(1));
}
}
输出:
Bitset: 0111111101111111011111100000000000000000000000000000000000000000
Converted Byte: 1111111011111110011111100000000000000000000000000000000000000000
他们都是64位,但在转换后,BitSet中的第一个0放置在其他位置。为什么会发生这种情况,我该如何解决?
toBinaryString
将按相反的位顺序进行打印。 您从最不重要的位开始,而toBinaryString
从最重要的位开始。(请参见第一个输出中零在第一位置,而在第二个输出中在第8个位置) - user8542101111111 01111111 01111110 0...
; toBinaryString:11111110 11111110 01111110 0...
=> 每个对应的8位都被反转了。或者,使用字符表示位,BitSet:hgfedcba ponmlkji ...
, toBinaryString:abcdefgh ijklmnop ...
- user85421toBinaryString
的方式不同。 - user85421== true
" - xerx593