`
zpball
  • 浏览: 916287 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java计算校验和:对“消息头+会话头+事务头+操作信息”按32位异或,对异或结果取反后的值为校验和。

阅读更多
java计算校验和:对“消息头+会话头+事务头+操作信息”按32位异或,对异或结果取反后的值为校验和。

/**
  * 计算校验和<br>
  * <p>对“消息头+会话头+事务头+操作信息”按32位异或,对异或结果取反后的值为校验和。
  * @param msg
  * @return
  */
 private String calcCheckSum(String msg) {
        byte[] arr = msg.getBytes();
        byte[] res = new byte[4];

        for (int i = 0; i < arr.length; i += 4) {
            res[0] ^= arr[i];
            res[1] ^= arr[i + 1];
            res[2] ^= arr[i + 2];
            res[3] ^= arr[i + 3];
        }

        res[0] = (byte) ~res[0];
        res[1] = (byte) ~res[1];
        res[2] = (byte) ~res[2];
        res[3] = (byte) ~res[3];

        String resStr = "";

        for (int i = 0; i < 4; i++) {
            resStr = resStr + byte2hex(res[i]);
        }

        return resStr;
    }
 
    /**
     * 将单字节转成16进制<br>
     * @param b
     * @return
     */
    private String byte2hex(byte b) {
        StringBuffer buf = new StringBuffer();
        char[] hexChars = {
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C',
                'D', 'E', 'F'
            };
        int high = ((b & 0xf0) >> 4);
        int low = (b & 0x0f);
        buf.append(hexChars[high]);
        buf.append(hexChars[low]);

        return buf.toString();
    }




16进制表示的16位或32位整数,高8位位组在前,低8位位组在后。举个例子:
    int n = 148;     //    转换成4字节,16进制
    int hi = n >> 8 ;    //高16位
    int lo = n & 0x00ff;    //低16位
    String hig = Integer.toHexString(hi);    //长度不足,再补0
    String low = Integer.toHexString(lo); // 16进制
----------------------------------------------------------------
这样148按要求就转换成了0094
分享到:
评论

相关推荐

    按32位异或取反的小工具

    在通信协议中,通常会将多个数据段(如消息头、会话头、事务头和操作消息)组合在一起,然后对这些段进行32位异或。这个过程可以确保任何数据的改变都会导致最终异或结果的变化,因为不同的数据将产生不同的异或值。...

    CRC计算器、和、异或、异或取反校验

    - 这种校验方式是异或校验的变体,计算结果后还需要取反,即先异或再取反得到校验值。 - 同样,如果接收端计算的结果与发送端一致,数据传输被认为是无误的。 7. **CRC_Calc.exe**: - 提供的CRC_Calc.exe文件很...

    按位异或校验和计算器.rar_异或_异或在线计算_异或在线运算_按位异或_校验和计算器

    本压缩包文件“按位异或校验和计算器.rar”提供了一个用于计算异或校验和的工具,特别是针对十六进制数值的异或操作。 异或操作的基本概念是:如果两个输入位相同,结果为0;如果输入位不同,结果为1。用数学符号...

    十六进制字符串按位异或校验和和校验工具

    在进行校验和计算时,我们通常对所有数据位执行异或操作,最终得到的结果就是校验和。 按位异或校验和的过程如下: 1. 将所有参与校验的数据视为二进制位串。 2. 对这些位串进行逐位异或操作。这里的“位”指的是二...

    按位异或校验和计算器

    "按位异或校验和计算器"是一种基于位操作的校验和算法,它通过计算所有数据位的异或结果来生成一个简短的校验值。这个校验和可以用来判断原始数据在传输或存储后是否保持一致。 异或(XOR)运算符是计算机科学中的...

    十六进制字符串按位异或运算工具和java位异或运算

    当两段相同的数据进行异或时,结果是0,这在生成校验和或者计算CRC(循环冗余校验)时非常有用,因为任何数据和0异或都保持不变。此外,异或运算也常用于位操作,比如在编程中设置或清除某个位、反转位模式等。 总...

    32位异或取反小工具

    For ‘Message header + Dialog header + Transaction header + Operation information’, perform XOR by 32 bits, and take the inverse of the XOR result as the checksum

    C语言位运算符:与、或、异或、取反、左移和右移 (2).docx

    - 示例:`a &= b`等同于`a = a & b`,这将a和b进行按位与操作,并将结果赋值回a。 位运算符在编程中有着广泛的应用,如设置或清除特定位、检查位标志、数据压缩、计算掩码等。理解并熟练运用位运算符对于编写高效...

    异或校验和计算工具

    异或校验和工具,用于计算十六进制数据的异或校验和。

    校验值计算工具(异或+CRC+和校验)

    整理的校验值计算工具(包括异或+CRC+和校验)其中包括多款校验工具,多款CRC校验工具,包括多种方式,异或检验工具及和校验工具,满足日常数据帧的各种校验方式,已使用360杀毒扫描,无病毒。

    labview异或和校验算法

    异或(XOR)操作是一种逻辑运算,它对两个输入位进行比较,如果这两个位相同,则结果为0;如果不同,则结果为1。在数据校验中,异或和校验是一种简单但有效的错误检测方法。通过将所有ASCII码进行异或操作,可以得到...

    BCC校验(异或校验)计算

    BCC校验是一种基于位操作的错误检测技术,它的核心思想是通过对一串数据进行特定的数学运算(通常为异或操作),生成一个校验和,这个校验和会附加到原始数据的末尾。当接收方接收到数据时,也会对数据执行相同的...

    校验和小工具(求和、异或、CRC)

    标题中的“校验和小工具(求和、异或、CRC)”指的是一个软件或程序,它主要用于计算三种不同的校验和方法:求和、异或和CRC(循环冗余校验)。这些方法在计算机科学中广泛用于数据完整性检查,确保在传输或存储过程...

Global site tag (gtag.js) - Google Analytics