校验和计算 - 最低有效字节的二进制补码

时间:2014-10-04 08:55:22

标签: java android network-programming

我试图通过计算数组中所有数据字节总和的最低有效字节的两个补码来创建校验和。

给定一个数组:

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 @ 34bdb859 b:FEFE

这是对的吗?

2 个答案:

答案 0 :(得分:1)

我有另一个解决方案:

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;
}

有人确认吗?

答案 1 :(得分:0)

只需将所有字节相加,取消resuit,将其转换或截断为一个字节,然后就完成了。