[英]Converting from BitSet to Byte array
我已經拿起了這個將BitSet轉換為Byte數組的例子。
public static byte[] toByteArray(BitSet bits) {
byte[] bytes = new byte[bits.length()/8+1];
for (int i=0; i<bits.length(); i++) {
if (bits.get(i)) {
bytes[bytes.length-i/8-1] |= 1<<(i%8);
}
}
return bytes;
}
但在討論論壇中,我已經看到,通過這種方法,我們不會得到所有的位,因為我們將在每次計算時丟失一位。 這是真的? 我們需要修改上面的方法嗎?
不,那沒關系。 帖子上的評論與帖子中的另一段代碼有關,從字節數組轉換為BitSet
。 不可否認,我會使用更多的空白。
此外,最終可能會有一個比它需要的更長的陣列。 數組創建表達式可以是:
byte[] bytes = new byte[(bits.length() + 7) / 8];
這為需要的位數提供了空間,但不再需要。 基本上它相當於“除以8,但總是向上舍入。”
如果由於字節序問題而需要以相反的順序使用BitSet,請更改:
bytes [bytes.length-i / 8-1] | = 1 <<(i%8);
至:
bytes [i / 8] | = 1 <<(7-i%8);
這對我來說很好。 如果您使用的是Java 1.7,則它具有toByteArray()
方法 。
僅供參考,使用
bits.length()
獲取bitset的大小可能會返回不正確的結果; 我不得不修改原始示例以利用size()方法獲取bitset的已定義大小(而length()返回set set的位數)。 有關詳細信息,請參閱下面的主題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.