| | |
| | | import java.math.BigInteger; |
| | | public class Jiaoyan { |
| | | |
| | | /**获取校验码除去包头相加取反*/ |
| | | /**获取校验码除去包头相加取反*/ |
| | | public static byte[] check(byte[] byt) { |
| | | |
| | | //字节数组转为16进制字符串/2后的长度 |
| | | //字节数组转为16进制字符串/2后的长度 |
| | | int size=BinaryToHexString2(byt).length()/2; |
| | | String[] hex=hex(BinaryToHexString2(byt)); |
| | | |
| | | //求和 |
| | | //求和 |
| | | int sum=0; |
| | | for(int i=0;i<size;i++) { |
| | | sum+=decodeHEX(hex[i]); |
| | | } |
| | | |
| | | //取反转为16进制字符串 |
| | | //取反转为16进制字符串 |
| | | String hex16=Integer.toHexString(~sum); |
| | | |
| | | //字符串的长度 |
| | | //字符串的长度 |
| | | int lenth=hex16.length(); |
| | | |
| | | byte[] jiaoyan=hexStringToByteArray(hex16.substring(lenth-4, lenth)); |
| | |
| | | |
| | | } |
| | | |
| | | /**求和校验*/ |
| | | /**求和校验*/ |
| | | public static byte[] checkqiuhe(byte[] byt) { |
| | | |
| | | //字节数组转为16进制字符串/2后的长度 |
| | | //字节数组转为16进制字符串/2后的长度 |
| | | int size=BinaryToHexString2(byt).length()/2; |
| | | String[] hex=hex(BinaryToHexString2(byt)); |
| | | |
| | | //求和 |
| | | //求和 |
| | | int sum=0; |
| | | for(int i=0;i<size;i++) { |
| | | sum+=decodeHEX(hex[i]); |
| | | } |
| | | |
| | | //取反转为16进制字符串 |
| | | //取反转为16进制字符串 |
| | | String hex16=Integer.toHexString(sum); |
| | | |
| | | //字符串的长度 |
| | | //字符串的长度 |
| | | int lenth=hex16.length(); |
| | | |
| | | byte[] jiaoyan=hexStringToByteArray(hex16.substring(lenth-2, lenth)); |
| | |
| | | } |
| | | |
| | | |
| | | /**16进制转为10进制*/ |
| | | /**16进制转为10进制*/ |
| | | public static int decodeHEX(String hexs){ |
| | | BigInteger bigint=new BigInteger(hexs, 16); |
| | | int numb=bigint.intValue(); |
| | |
| | | |
| | | } |
| | | |
| | | /**将16进制字符串转为hex字符串数组2个字符串一个*/ |
| | | /**将16进制字符串转为hex字符串数组2个字符串一个*/ |
| | | public static String[] hex(String message) { |
| | | int size=message.length()/2; |
| | | String[] hex=new String[size]; |
| | |
| | | } |
| | | |
| | | |
| | | /**将字节数组转换为16进制字符串无空格*/ |
| | | /**将字节数组转换为16进制字符串无空格*/ |
| | | public static String BinaryToHexString2(byte[] bytes) { |
| | | String hexStr = "0123456789ABCDEF"; |
| | | String result = ""; |
| | |
| | | |
| | | |
| | | /** |
| | | * 16进制表示的字符串转换为字节数组 |
| | | * 16进制表示的字符串转换为字节数组 |
| | | * |
| | | * @param hexString 16进制表示的字符串 |
| | | * @return byte[] 字节数组 |
| | | * @param hexString 16进制表示的字符串 |
| | | * @return byte[] 字节数组 |
| | | */ |
| | | public static byte[] hexStringToByteArray(String hexString) { |
| | | hexString = hexString.replaceAll(" ", ""); |
| | | int len = hexString.length(); |
| | | byte[] bytes = new byte[len / 2]; |
| | | for (int i = 0; i < len; i += 2) { |
| | | // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节 |
| | | // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节 |
| | | bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character |
| | | .digit(hexString.charAt(i+1), 16)); |
| | | } |