二进制 1010 1001 十进制 169
手动推算
Integer.toBinaryString(mCheckSum) //int转为二进制
原码:把最左边的一位腾出来表示正负,0 表示正数,1 表示负数
负数: 1010 1001
反码:正数的反码与其原码相同,负数的反码是符号位不变其他位取反
负数: 1101 0110
补码:正数的补码与其原码相同,负数在反码的基础上 +1
负数:1101 0111
转换: 101 0111 16进制 57
代码方式计算
byte[] bytes = Convert.hexsStringToBytes("7F10020612");//转为数组
int mCheckSum = ~Convert.byteSum(bytes) +1;//求和反码
String.format("%04X", mCheckSum &0xFFFF) // 转为16进制补码
/**
* 十六进制String 转为byte 数组
* @param hexString 值
* @return
*/
public static byte[]hexsStringToBytes(String hexString) {
if (hexString ==null || hexString.equals("")) {
return new byte[1024];
}
hexString = hexString.toUpperCase();
int length = hexString.length() /2;
char[] hexChars = hexString.toCharArray();
byte[] d =new byte[length];
for (int i =0; i < length; i++) {
int pos = i *2;
d[i] = (byte) (charToByte(hexChars[pos]) <<4 |charToByte(hexChars[pos +1]));
}
return d;
}
c
网友评论