【发布时间】:2018-10-17 14:21:39
【问题描述】:
我正在尝试计算两个二进制字符串的 crc 校验和,但我只能获得循环的第一次迭代。将字符串转换为字符串数组,最后转换为 int 数组。错误检查在别处进行。
public String checksum(String a, String b) {
// These arrays will convert the input strings to an array
String[] mArray = a.split("");
String[] pArray = b.split("");
// Creates arrays from the above corresponding arrays
int[] mAr = new int[mArray.length];
int[] pAr = new int[pArray.length];
// populates message array
for (int i = 0; i < a.length(); i++) {
mAr[i] = Integer.parseInt(mArray[i]);
}
// populates pattern array
for (int i = 0; i < b.length(); i++) {
pAr[i] = Integer.parseInt(pArray[i]);
}
//int frame = mAr.length - pAr.length + 1;
int pLength = pAr.length;
int mLength = mAr.length;
// int[] checksum = new int[frame];
System.out.println(pLength);
//CHECKSUM ITERATION
for (int i = 0; i < pAr.length; i++) {
mAr[i] = mAr[i] ^ pAr[i];
if (i ==pLength) {
// mAr[i] = mAr[i] >> 1;
i = 0;
}
}
for (int i = 0; i < mAr.length; i++) {
System.out.print(mAr[i]);
}
我的测试是 留言:11001010 图案:10011 预期产量:0100 但相反,我得到:01010010 这是两个字符串的第一个异或。但是循环不会继续用模式再次对那个字符串进行异或。我能做些什么来纠正这个循环问题?还是我做错了?
【问题讨论】:
-
if (i ==pLength) {- 这个分支永远不会被击中。 -
这只是一个 XOR,而不是 CRC 算法,继续对消息中的模式进行 XOR 不会使其成为 CRC 算法,它是一种根本不同的算法(XOR 是 part是的)
-
如果你想要一个字符数组,使用
string.toCharArray()会便宜很多。您可以使用ch - '0'解析每个整数中的整数,但错误检查较少。 -
@meowgoesthedog 是的,我刚刚把它修好了,然后打到了分支
-
@harold 我理解那部分,但我无法获得最终的异或,因此无法继续编辑:除非这是错误的?
标签: java algorithm iteration checksum crc