[英]BitSet and Byte Array value getting SET from opposite direction
我有:
public byte[] bytes = new byte[5]; //BitComp Class
public BitSet bits = new BitSet(40);
class 中的 getter 和 setter 名为 BitComp。 下面的 class 将所有前 8 位设置为 1(byte[0])。之后,它将所有字节转换为 BitSet。 现在,当它将第二位设置为 true 并打印它们时。
import java.util.BitSet;
public class TestBitSet {
public void testBit(){
BitComp comp = new BitComp();
comp.bytes[0] |= 0xFF;
comp.setBits(getBitsFromByte(comp.getBytes()));
System.out.println(toCharArray(comp.getBits()));
BitSet bs = comp.getBits();
bs.set(1,true);
comp.setBits(bs);
System.out.println(toCharArray(comp.getBits()));
}
private BitSet getBitsFromByte(byte[] barray)
{
BitSet bits=new BitSet();
if(barray!=null)
{
for (int i=0; i<barray.length*8; i++)
{
if ((barray[barray.length-i/8-1]&(1<<(i%8)))!= 0)
{
bits.set(i);
}
}
}
return bits;
}
public static char[] toCharArray(final BitSet bs)
{
final int length = bs.length();
final char[] arr = new char[length];
for(int i = 0; i < length; i++)
{
arr[i] = bs.get(i) ? '1' : '0';
}
return arr;
}
public static void main(String args[]){
TestBitSet tbs = new TestBitSet();
tbs.testBit();
}
}
Output:0000000000000000000000000000000011111111 <- 0th
第0-> 01000000000000000000000000000000011111111
不应该有任何变化,因为 byte[0] 包含前 8 个元素,我使用 BitSet 操作将第二个元素设置为 1。 所以 BitSet 是从 LHS 接近的,而 Byte 数组是从 RHS 存储的。 如何解决这个问题? getBitsFromByte 方法有问题吗? 请建议。 谢谢
只需在您的集合中添加一点数学: ((byteNumber*8)+(7-bitNumber))
您没有提供 BitComp 的代码,但在我看来,您决定了如何将位转换为字节以及打印字节的顺序。
它完全取决于你什么命令你什么东西要设置或打印出来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.