為什么會出現已經是兩位字節了還在前面補零的情況,如:0ce,正常情況應該是ce,而我的程序打印出來會出現0ce的情況。望大神給予指點
public static void printHexByByteArray2(String fileNames) throws IOException{
FileInputStream in = new FileInputStream(fileNames);
byte[] buf = new byte[64];
int bytes = 0;
int j = 1;
while((bytes = in.read(buf, 0, buf.length)) != -1){
for(int i=0;i<bytes;i++){
if(buf[i] <= 0xf){
System.out.print("0");
}
System.out.print(Integer.toHexString(buf[i] & 0xff)+" ?");
if(j++ % 10 == 0){
System.out.println();
}
}
}
in.close();
}
這是錯誤圖片:
2016-04-09
Bytes是有符號的整數,數值范圍是:-127至+127,而你的條件判斷是
if (buf[i] <= 0xf),所有小于F的數,包括負數都會打印0,就出現你的錯誤了。更改判斷條件為:
if ((buf[i] <= 0xf) & (buf[i] >= 0)) ,錯誤即可糾正?
2016-06-30
估計你選的文件中含有漢字
2016-04-14
if((buf[i]&0xff)<= 0xf){
?? ??? ??? ??? ??? ?//單位數前面補0
?? ??? ??? ??? ??? ?System.out.print("0");
?? ??? ??? ??? ?}
這樣也行,用位運算排掉符號位