0

ファイルの署名を比較するツールを作成しました。これは、ファイルの最初の非常に多くのバイトを読み取り、これを 16 進文字列に変換してから、この結果を配列と比較し、最後に一致するファイル タイプを JText 領域に出力します。 、私の問題は、doc ファイルを入力すると、たとえば、最初の 8 桁の 16 進数は「50 4B 03 04」ですが、これを JText 領域に出力すると 504B34 になります。バイナリは0000です....そして4(50 4B 03 '04')で、00000100だと思うので、コードがゼロの場合、最初の4バイトを出力していないと思います。すべてを含める方法を知っている人はいますかゼロの?

わかりました、私は自分の問題を知っています。説明するために投稿できます。これは、バイトを16進数に変換する文字列ビルダーを作成するコードのスニペットであることがわかります。問題は、文字列をフォーマットしようとしたことですbuilder with with sb.append("%02x.. などですが、文字列ビルダーを headerData 行に入れたときに、これまでに何もしていないと思います:

}
                    StringBuilder sb = new StringBuilder();
                    for(byte b:a){
                     sb.append(String.format("%02x", b));
                    }
                        if (i != -1) {
        HeaderData unknownHead = new HeaderData(" ", (sb.toString()));
4

2 に答える 2

0
String.format(" %02x", bytes[i] & 0xFF)

    byte[] a = {(byte)3, (byte)-128, (byte)-4, (byte)3, (byte)0,
                (byte)1, (byte)127};
    StringBuilder sb = new StringBuilder();
    for (byte b : a) {
        sb.append(String.format("%02x ", b));
    }
    System.out.println(sb.toString());

結果:

03 80 fc 03 00 01 7f 
于 2013-03-05T15:29:24.177 に答える
0

まあInteger.toHexString(byte b) やるべき

コード

byte[] a = {(byte)10, (byte)-120, (byte)-14,  (byte)0,
        (byte)1, (byte)127};

StringBuilder sb = new StringBuilder();
for (byte b : a) {
    sb.append(Integer.toHexString(b)+" ");
}

System.out.println(sb.toString());

結果

a ffffff88 fffffff2 0 1 7f 
于 2013-03-05T18:54:57.810 に答える