CheckSum 8 Xor错误的结果

时间:2016-08-02 18:03:05

标签: java checksum xor

我正在尝试创建一个“CheckSum 8 Xor”

到目前为止这是我的代码

String check = "00 02 01 03 c0 30 30 31 e1 c7 90 1c 44 54 61 6e 79 61 20 20 20 20 20 20 20 20 20 20 20 1c 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 04";

 int getCheckSum(String check)
{
    byte[] chars = check.getBytes();
    int XOR = 0;
    for (int i = 0; i < check.length(); i++)
    {
        XOR ^=   Integer.parseInt(toHexString(chars[i]));
    }
    return XOR;
}

但返回的值是“18”当它被假定为“20”

输入是HEX我在这里检查并且它正确计算

http://www.scadacore.com/field-applications/programming-calculators/online-checksum-calculator/

1 个答案:

答案 0 :(得分:0)

您必须用空格分隔输入字符串:

public static int getCheckSum(String str) {
    int xor = 0;
    String[] arr = str.split(" ");

    for (int i = 0; i < arr.length; i++)
        xor ^= Integer.parseInt(arr[i], 16);

    return xor;
}

或使用流:

public static int getCheckSum(String str) {
    return Arrays.stream(str.split(" "))
                 .map(s -> Integer.parseInt(s, 16))
                 .reduce((a, b) -> a ^ b)
                 .orElse(0);
}