public class IOUtil {public static void printHex(String fileName)throws IOException{ int i=1; int b; FileInputStream in= new FileInputStream(fileName); while((b=in.read())!=-1){ if(b<=0xf){ System.out.print("0"); } System.out.print(Integer.toHexString(b)+" "); if(i++%10==0) System.out.println(); } in.close(); }?public static void printHexByByteArray(String fileName) throws IOException{ FileInputStream in=new FileInputStream(fileName); byte[] buf=new byte[2000*1024]; int bytes=in.read(buf, 0, buf.length); int j=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();?}}用打斷點的方式看 前者第14個數是192,后者是-64,導致控制臺前者輸出的是c0,后者輸出0c0 。而且為啥每次正常運行控制程序 控制臺的結果都不一樣 感覺跟隨機的似的...
1 回答
已采納

Its_forever
TA貢獻361條經驗 獲得超328個贊
第一個問題:前者第14個數是192,192轉化為二進制(11000000),后者是-64,轉化為二進制(11000000),所以數據還是一樣的。只是一個有符號位一個是無符號位。
你有這樣兩個判斷:
if(b<=0xf){ System.out.print("0"); } if(buf[i]<=0xf){ System.out.print("0"); }
還因為前者是b=192,大于0xf,所以不進入循環輸出c0.
后者是-64,小于0xf,滿足條件,進入循環,輸出0,然后再輸出c0.
第二個問題:控制臺的結果
我沒有遇到這個問題,你再好好看看呢,我覺得不會吧。
添加回答
舉報
0/150
提交
取消