我正在尝试实现8位弗莱彻算法。我编写了一段代码,但是我不确定我是否正确地理解了算法。这是我的代码:
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的长度。
有人能解释一下这个问题吗?任何帮助都将不胜感激。谢谢。
发布于 2016-03-09 08:29:09
根据这篇文章,您应该对ckA和ckB的值执行模量计算,以防止它们超过255。所以举个例子:
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上执行模量计算。
https://stackoverflow.com/questions/35886276
复制相似问题