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

标签 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));
 }

产生...

一个:[B@34bdb859 b: 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;
}

有人确认吗?

关于java - 校验和计算 - 最低有效字节的二进制补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26191250/

相关文章:

java - OpenCv 在 netbeans 中运行良好,但在导出的 jar 中运行不佳

java - instanceof 如何为具有私有(private)构造函数的类返回 true?

java - 默认实现还是抽象方法?

javascript - ngCordova 捕获 - 属性 'capture' 未定义

Android studio : android. support.v4.widget.DrawerLayout 找不到

android - 导航组件的 popUpTo 不删除向上按钮

rest - 非 RESTful 与 RESTful

java - 正则表达式用问号替换逗号分隔的单词

windows - 如何在 Windows 中获取或更改已断开连接的 NIC 的 IP 地址?

android - 如何从数据包中获取 uid - android