2016-09-28 70 views
0

我有以下我已阅读,我知道我的校验码肯定只有单字节值,但当我转换我倾向于得到ffffff9e等,但我只需要9e。如何将它转换为纯粹的2位数字,如果它的单个数字填充为0?如何忽略ffff并确保单字节的填充为0?

   byte checkCode = r.readByte();    // check code 
     System.out.println("checkCode is 0x: " + Integer.toHexString(checkCode)); 

回答

1

事实是,如果转换0x9e为整型数字,这将是-98,而ffffff表示minus symbole -。有6 f,因为你使用Integer,尝试Long,你会得到更多f

如果您有另一个测试数据,例如1e(它是30的int值),那么结果将如您所期望的那样。

如果你只是想删除f,最简单的办法:

System.out.println("checkCode is 0x: " + Integer.toHexString(checkCode).substring(6, 8)); 

由于您使用Integer,所以你总是想从6至8

+0

子字符串这将是始终8位权? – user5313398

+0

如果你使用Integer.toHexString,总是8,尝试Long.toHexString你会得到更多的f。 –

+0

那么最好只使用Integet来十六进制呢? – user5313398