Javaでバイト配列をBitSetに変換することで間違ったビット表現が得られるのはなぜですか

アコス

ビット表現を使用するために、バイト配列を変換しようとしました。

入力:

byte[] values = new byte[]{21, 117, 41, -1};

バイト配列から1つのBitSetオブジェクトを作成したいのですが、問題を調査するためにそれを分割し、配列の各要素から複数のBitSetオブジェクトを作成しようとしました。

BitSetオブジェクトは次の方法で作成されます。

BitSet bitSetTwentyOne = BitSet.valueOf(new byte[]{21});
BitSet bitSetOneHundredSevenTeen = BitSet.valueOf(new byte[{117});
BitSet bitSetFourtyOne = BitSet.valueOf(new byte[]{41});
BitSet bitSetMinusOne = BitSet.valueOf(new byte[]{-1});

ビットは、次の方法を使用して出力されます。

private String getBits(BitSet bitSet) {
    StringBuilder bitsBuilder = new StringBuilder();

    for (int i = 0; i < bitSet.length(); i++) {
        bitsBuilder.append(bitSet.get(i) == true ? 1 : 0);
    }

    return bitsBuilder.toString();
}

出力:

bitSetTwentyOne: 10101 but expected -> 00010101 (BitSet::length = 5)
bitSetOneHundredSevenTeen: 1010111 but expected -> 01110101 (BitSet::length = 7)
bitSetFourtyOne: 100101 but expected -> 00101001 (BitSet::length = 6)
bitSetMinusOne: 11111111 but it is as expected at least (BitSet::length = 8)

ゼロで埋める必要がある場合でも、すべての値を8ビット幅にします。11741を変換する場合に、なぜ間違ったバイナリ値が返されるのかわかりません

rgettman

ビットを逆方向に印刷しているようです。出力(目的の先行ゼロを除く)が予想される入力の鏡像であることに注意してください。

あなたのコードを使用して、渡す4必要があります100、私は得001ます。ビット0は最下位ビットであり、最上位ビットではないようです。これを修正するには、インデックスを逆方向にループします。-141が先行ゼロを除いて正しい理由は、それらのビットセット表現が回文であるためです。

先行ゼロを前に付けるには、length()から8減算し、その数のゼロを出力します。このlength()メソッドは、数値を表すために必要なビット数のみを返します。これは自分でコーディングする必要があります。BitSet先行ゼロ機能はありません

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Haskellで16進数から12進数に変換しようとすると、間違った結果が得られるのはなぜですか?

分類Dev

なぜ間違った出力が得られるのですか?

分類Dev

バイト配列を文字列に変換してからバイト配列に戻すときに、長さが異なるのはなぜですか?

分類Dev

整数配列オブジェクトを出力するとハッシュコードが得られるのに対し、char配列オブジェクトを出力するとJavaで値が得られるのはなぜですか?

分類Dev

とにかくifelseマクロの「間違った」表現が評価されるのはなぜですか?

分類Dev

Javaでバイト配列とビット配列を変換する方法は?

分類Dev

文字列から変換するときにKotlinが間違ったInt値を返すのはなぜですか

分類Dev

ソナーがこの表現が常に間違っていると考えるのはなぜですか

分類Dev

64ビット配列を含むバイト配列を作成するにはどうすればよいですか?また、それらのビットを16進値に変換するにはどうすればよいですか?

分類Dev

cudaに2つの数値を追加すると間違った結果が得られるのはなぜですか?

分類Dev

バイナリファイルのgrep-Pが間違ったバイトと一致することがあるのはなぜですか?

分類Dev

pd.concat()とpd.merge()の違いと、なぜ間違った出力が得られるのですか?

分類Dev

コンパイラがこの変数を間違った値に初期化するのはなぜですか?これは配置の問題ですか?

分類Dev

C#でushortポート番号をhtonsからntohsに変換すると、異なる結果が得られるのはなぜですか?

分類Dev

配列から画像に変換するときにビットシフトがあるのはなぜですか?

分類Dev

配列から画像に変換するときにビットシフトがあるのはなぜですか?

分類Dev

この多項式予測式を使用すると、なぜ間違った予測が得られるのですか?

分類Dev

System.inでASCII表現のない文字を読み取っても2バイトの文字が得られないのはなぜですか?

分類Dev

この場合、Rが間違った分布をプロットするのはなぜですか?

分類Dev

(Leetcode#231)Power of Twoの実装で間違った結果が得られるのはなぜですか?

分類Dev

このJavaアプリケーションで年、月、日から始まる新しい日付を作成すると、間違った結果が得られるのはなぜですか?

分類Dev

符号なし整数がバイト配列形式で「3」が前に付いた文字列に変換されるのはなぜですか?

分類Dev

変数を配列に入れないようにこのコードを変換する際にどこが間違っているのですか?

分類Dev

無限ループを使用して符号なし整数を追加すると、間違った結果が得られるのはなぜですか?

分類Dev

マチンの公式を使用して円周率の値を計算すると、間違った値が得られるのはなぜですか?

分類Dev

「timedatectlset-time」の後に現地時間が間違った時間にリセットされるのはなぜですか?

分類Dev

64ビットのメルセンヌツイスターエンジンによって生成された数値を%1000にすると、1000より大きい数値が得られるのはなぜですか?

分類Dev

デカルト座標と球面座標の間で変換するときに、このPythonコードが間違った答えを与えるのはなぜですか?

分類Dev

新しく割り当てられたバイト配列を、タイプが[] byteの変数に割り当てることができないのはなぜですか?

Related 関連記事

  1. 1

    Haskellで16進数から12進数に変換しようとすると、間違った結果が得られるのはなぜですか?

  2. 2

    なぜ間違った出力が得られるのですか?

  3. 3

    バイト配列を文字列に変換してからバイト配列に戻すときに、長さが異なるのはなぜですか?

  4. 4

    整数配列オブジェクトを出力するとハッシュコードが得られるのに対し、char配列オブジェクトを出力するとJavaで値が得られるのはなぜですか?

  5. 5

    とにかくifelseマクロの「間違った」表現が評価されるのはなぜですか?

  6. 6

    Javaでバイト配列とビット配列を変換する方法は?

  7. 7

    文字列から変換するときにKotlinが間違ったInt値を返すのはなぜですか

  8. 8

    ソナーがこの表現が常に間違っていると考えるのはなぜですか

  9. 9

    64ビット配列を含むバイト配列を作成するにはどうすればよいですか?また、それらのビットを16進値に変換するにはどうすればよいですか?

  10. 10

    cudaに2つの数値を追加すると間違った結果が得られるのはなぜですか?

  11. 11

    バイナリファイルのgrep-Pが間違ったバイトと一致することがあるのはなぜですか?

  12. 12

    pd.concat()とpd.merge()の違いと、なぜ間違った出力が得られるのですか?

  13. 13

    コンパイラがこの変数を間違った値に初期化するのはなぜですか?これは配置の問題ですか?

  14. 14

    C#でushortポート番号をhtonsからntohsに変換すると、異なる結果が得られるのはなぜですか?

  15. 15

    配列から画像に変換するときにビットシフトがあるのはなぜですか?

  16. 16

    配列から画像に変換するときにビットシフトがあるのはなぜですか?

  17. 17

    この多項式予測式を使用すると、なぜ間違った予測が得られるのですか?

  18. 18

    System.inでASCII表現のない文字を読み取っても2バイトの文字が得られないのはなぜですか?

  19. 19

    この場合、Rが間違った分布をプロットするのはなぜですか?

  20. 20

    (Leetcode#231)Power of Twoの実装で間違った結果が得られるのはなぜですか?

  21. 21

    このJavaアプリケーションで年、月、日から始まる新しい日付を作成すると、間違った結果が得られるのはなぜですか?

  22. 22

    符号なし整数がバイト配列形式で「3」が前に付いた文字列に変換されるのはなぜですか?

  23. 23

    変数を配列に入れないようにこのコードを変換する際にどこが間違っているのですか?

  24. 24

    無限ループを使用して符号なし整数を追加すると、間違った結果が得られるのはなぜですか?

  25. 25

    マチンの公式を使用して円周率の値を計算すると、間違った値が得られるのはなぜですか?

  26. 26

    「timedatectlset-time」の後に現地時間が間違った時間にリセットされるのはなぜですか?

  27. 27

    64ビットのメルセンヌツイスターエンジンによって生成された数値を%1000にすると、1000より大きい数値が得られるのはなぜですか?

  28. 28

    デカルト座標と球面座標の間で変換するときに、このPythonコードが間違った答えを与えるのはなぜですか?

  29. 29

    新しく割り当てられたバイト配列を、タイプが[] byteの変数に割り当てることができないのはなぜですか?

ホットタグ

アーカイブ