簡體   English   中英

從BitSet轉換為Byte數組

[英]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的位數)。 有關詳細信息,請參閱下面的主題。

java.util.BitSet - set()無法按預期工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM