首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中8位Fletcher算法的正确实现是什么?

java中8位Fletcher算法的正确实现是什么?
EN

Stack Overflow用户
提问于 2016-03-09 08:18:20
回答 1查看 1.5K关注 0票数 3

我正在尝试实现8位弗莱彻算法。我编写了一段代码,但是我不确定我是否正确地理解了算法。这是我的代码:

代码语言:javascript
复制
public class TestFletcher {
public static void main(String[] argv) {

    String bin = "10010010101111101110101101110011";
    char[] cA = bin.toCharArray();
    int ckA = 0, ckB = 0;
    for (int i = 0; i < cA.length; i++){
        ckA += Integer.valueOf(cA[i])/49;
        ckB += ckA;
    }
    System.out.println(ckA);
    System.out.println(ckB);

}

我得到的结果是: ckA = 20,ckB = 308。我假设这不是正确的实现,因为308不能用8位二进制表示,即ckA和ckB的长度。

有人能解释一下这个问题吗?任何帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-09 08:29:09

根据这篇文章,您应该对ckA和ckB的值执行模量计算,以防止它们超过255。所以举个例子:

代码语言:javascript
复制
String bin = "100100101011111011101011";
char[] cA = bin.toCharArray();
int ckA = 0, ckB = 0;
for (int i = 0; i < cA.length; i++){
    ckA = (ckA + Integer.valueOf(cA[i])/49) % 255;
    ckB = (ckB + ckA) % 255;
}
System.out.println(ckA);
System.out.println(ckB);

System.out.println((ckB << 8) | ckA);

这可能主要是因为end校验和是一个带有ckB的8位移位的ckA,因此ckA的值几乎肯定应该小于256。但是,除非您处理的是潜在的大二进制字符串,否则您很可能只在ckA上执行模量计算。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35886276

复制
相关文章

相似问题

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