繁体   English   中英

来自byte []的BitSet,长度很奇怪

[英]BitSet from byte[] with strange lenght

我的代码是:

String blah = "blah";
byte[] blahBytes = blah.getBytes("US-ASCII");
System.out.println(Arrays.toString(blahBytes));
BitSet set = BitSet.valueOf(blahBytes);
System.out.println(set.length());

输出为:

[98, 108, 97, 104]
31

为什么length()返回31? 不是32岁吗?

位设置长度由设置为1的最高位的位置确定。 由于传递给构造位集的所有字节均表示UNICODE的ASCII字符子集,因此第8位始终为零。 因此,根据字符串末尾的字母或数字,设置为1的最高位将是30位或31位:如果传递"bla1"而不是"blah" ,则将获得30( 演示1 )。 如果使用控制字符(例如<TAB> ,则可以得到更短的28位( 演示2 )。

如果您希望将长度四舍五入为8的下一个倍数,请使用

int roundedLength = 8 * ((set.length() + 7) / 8);

演示3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM