我试图通过计算数组中所有数据字节之和的最低有效字节的二补码来创建校验和。
给定一个数组:
byte[] bytes = new byte[] { 0x01, 0x02 };
像这样的东西行吗。。。
public static void main(String []args)
{
byte[] bytes = new byte[] { 0x01, 0x02 };
BigInteger bi = new BigInteger(bytes);
BigInteger biRes = bi.not().add(BigInteger.ONE);
byte[] result = biRes.toByteArray();
System.out.println("a: " + result);
System.out.println("b: " + javax.xml.bind.DatatypeConverter.printHexBinary(result));
}
生成。。。
a: [B@34bdb859b: FEFE
这是正确的吗?
我有另一个解决方案:
private static byte calculateChecksum8(byte[] bytes){
byte result = 0;
for(int i = 0; i < bytes.length; i++){
result += bytes[i];
}
result = (byte) (~ result & 0xFF);
result = (byte) (result +1 & 0xFF);
String str = String.format("%02x", result);
System.out.println(result+" = "+str.toUpperCase());
return result;
}
有人确认吗?
只需将所有字节相加,求反resuit,将其强制转换或截断为一个字节,就完成了。