[英]Byte to BitSet conversion
我正在使用以下代码进行转换:
public static BitSet fromByte(byte b){
BitSet bs = new BitSet(8);
for (int i=0; i<8; i++){
if ((b & (1 << i)) > 0){
bs.set(i);
}
}
int length = bs.length();
return bs;
}
输出为{0,3,4,5,6}(来自bs的调试器显示)-设置位的索引。 我认为这应该代表长度为7的1001111,但由于1001111为79,而不是121,所以是错误的。我也希望长度为8。基本上,我想要一个长度为8的bitSet,它可以正确表示任何字节数。 我的期望是01111001,调试器的显示将显示{1,2,3,4,5,7}
字节中的位从右到左编号,而不是从左到右编号。 这就是设置位{0, 3, 4, 5, 6}
定义此模式的原因:
7 6 5 4 3 2 1 0
0 1 1 1 1 0 0 1
您正在按以下顺序检查位:
00000001 = index 0
00000010 = index 1
00000100 = index 2
00001000 = index 3
etc.
即从右到左,并将它们从左到右存储在位集中。
位集的长度将与表示您已设置的位所需的位一样少。 例如,如果您设置前三位,则长度将为2,因为表示仅需要2位。
BitSet的构造函数设置其Size ,而不是其length 。 我怀疑它们是两个不同的概念。
当我运行您的代码时,我得到了我期望的结果。 您确定所传递的价值吗? 也许您对位的持久性感到困惑? 通常从右向左读取,而不是从左向右读取(或大尾数位按位顺序 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.