我正在处理hex文件并显示其内容但是如果值为“0”。当我把它打印出来时它没有出现。
例如
0 0 0 b7 7a 7a e5 db 40 2 0 c0 0 0 9 18 16 0 e3 1 40 0 0 3f 20 f0 1 5 0 0 0 0 0 0 41 bc 7a e5 db 40 2 0 c0 1 0 9 18 16 0 e3 1 40 0 0 3f 20 f0 1 5 0 0 0 0 0 0 53 3f 7b e5 db 40 2 0 c0 3 0 9 2 19 24 3d 0 22 68 1 db 9
代码
String filename = "C:\\tm09888.123";
FileInputStream in = null;
int readHexFile = 0;
char hexToChar = ' ';
String[] bytes = new String[10];
try
{
in = new FileInputStream(filename);
while((readHexFile = in.read()) != -1)
{
if (Integer.toHexString(readHexFile).equals("f0"))
{
System.out.print("\n\n\n");
}
System.out.print(Integer.toHexString(readHexFile) + " ");
}
}
catch (IOException ex)
{
Logger.getLogger(NARSSTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
当我打印出文件时,没有出现“0”,而诸如“c0”的值变为“c”。
我如何重写代码以显示“0”?
答案 0 :(得分:4)
Integer.toHexString
不保证返回两位数的结果。
如果您希望它始终为两位数,则可以改为使用String.format
:
System.out.print(String.format("%02x ", readHexFile));
答案 1 :(得分:1)
当在屏幕上显示“0”时,没有出现值,“c0”之类的值只变为“c”
我怀疑“0c”更有可能变成“c”。我希望“c0”没问题。
问题是你正在使用Integer.toHexString
,它只会使用所需数量的数字。您可以手动通过编写
if (readHexFile < 0x10) {
System.out.print("0");
}
或者,只需使用:
private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
...
System.out.print(HEX_DIGITS[readHexFile >> 4]);
System.out.print(HEX_DIGITS[readHexFile % 15]);
System.out.print(" ");
甚至更简单:
System.out.printf("%02x ", readHexFile);
另请注意,无需转换为十六进制字符串即可与0xf0
进行比较。您可以使用:
if (readHexFile == 0xf0) {
System.out.print("\n\n\n");
}
答案 2 :(得分:0)
我不能说代码的问题是什么,但如果你使用Scanner看起来会更清楚
Scanner sc = new Scanner(new File(fileName));
while(sc.hasNext()) {
String s = sc.next();
System.out.println(s);
}