簡體   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