0

16 進数を 16 ビットのバイナリ文字列に変換し、ビットごとの演算子を使用してこれらの 2 つを比較する割り当てがあります。文字列ビルダー文字列に対してa.charAt[i]&を実行する for ループがあります。b.charAt[i]今、私はそれが2進数を出力することを期待していますが、その行が実行されるたびに、0でも1でもない数値が返されるところまで来ました。そして、2つの数字(2と3)が返されます。私は何を間違っていますか?

いくつかのコード:

    int bin = 0;
    hex = hex.replaceFirst("0x", "");
    bin = Integer.parseInt(hex, 16);
    hex = String.format("%16s", Integer.toBinaryString(bin));
    return hex;

評価しようとしている 2 つの 16 進数はFFF70001です。それらをバイナリ文字列に正常に変換しました。また、理由はわかりませんが、前のゼロは表示されず、スペースだけです:/

私は何時間もオンラインで広範囲に調べましたが、私が抱えている問題を見つけることができないようです.

4

2 に答える 2

1

Integer.parseInt()を見て、16 進数の文字列を整数に変換する必要があると思います。数値表現を取得すると、バイナリ操作がはるかに簡単になります。

文字列のバイナリ表現が本当に必要な場合は、Integer.toBinaryString()を確認してください。

于 2012-10-04T10:43:56.580 に答える
1

2 つの 16 ビット、ビッグ エンディアン、16 進数をビットごとに AND 演算し、結果をバイナリとして表示することを想定しています。

他の人が言ったように、文字列ではなく数字を使用すると、作業が楽になります-これが割り当ての制約でない限り?

私がこのタスクを、私の仮定と私が理解している範囲で行っていたとしたら、次のようになります。

  • 文字列を数値に変換する
  • 0x8000からまでの数値の各ビットについて0x0001:
    • &対応するビット
    • 結果をStringBuilder
  • の内容を返すStringBuilder

各数値の対応するビットをステップ実行するには、ビット マスキングビット シフトを使用します。

NB0x8000は 16 ビット数の最上位ビットです。

別の方法として、Java に多くのことを任せることもできますが、これはあなたの課題のポイントではないかもしれません。

final int a = Integer.parseInt("FFF7", 16); // 0b1111111111110111
final int b = Integer.parseInt("0001", 16); // 0b0000000000000001

final int result = a & b;

final String output = String.format("%16s", 
    Integer.toBinaryString(result)).replace(' ', '0');

System.out.println(output); 

これは印刷されます:

0000000000000001

これが何らかの形で役立つことを願っており、私の仮定から大きく外れていないことを願っています。幸運を!

于 2012-10-04T15:10:37.690 に答える