0

我制作了一个比较文件签名的工具,它通过读取文件的前这么多字节,然后将其转换为十六进制字符串,然后将此结果与数组进行比较,最后在 JText 区域上打印匹配的文件类型来做到这一点,我的问题是,当我输入一个 doc 文件时 - 例如,前 8 个十六进制数字是“50 4B 03 04”,但是当它在 JText 区域上打印出来时,我得到 504B34,现在我认为它是因为零二进制是 0000 .... 4 (50 4B 03 '04') 我认为它是 00000100 所以我认为代码只是不输出前 4 个字节,如果它是一个零,有人知道如何包含所有零?

好的,我知道我的问题,我可以发布它来解释,正如你所看到的,这是我的代码片段,我在其中创建了一个字符串生成器来将字节转换为十六进制,问题是我试图格式化字符串带有 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 回答