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
提交
取消