首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CheckSum 8异或错误结果

CheckSum 8异或错误结果
EN

Stack Overflow用户
提问于 2016-08-03 02:03:05
回答 1查看 2.9K关注 0票数 2

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

到目前为止,这是我的代码

代码语言:javascript
复制
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”。

输入是我在这里检查的十六进制,它可以正确计算

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

EN

回答 1

Stack Overflow用户

发布于 2018-09-27 18:37:22

你必须用空格分割你的输入字符串:

代码语言:javascript
复制
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;
}

或者使用streams:

代码语言:javascript
复制
public static int getCheckSum(String str) {
    return Arrays.stream(str.split(" "))
                 .map(s -> Integer.parseInt(s, 16))
                 .reduce((a, b) -> a ^ b)
                 .orElse(0);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38727547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档