gpt4 book ai didi

java - CRC 校验和迭代 Java

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:39:44 26 4
gpt4 key购买 nike

我正在尝试计算两个二进制字符串的 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这是两个字符串的第一个异或。但是循环不会继续用模式再次对该字符串进行异或。我该怎么做才能纠正这个循环问题?还是我做错了?

最佳答案

正如人们所提到的,这可能无助于实现 CRC 算法,但为了解决您的特定帮助请求以便您知道将来该怎么做,我将包含答案。

简单方法

根据需要一遍又一遍地重复 pAr 的一种简单但效率低下的方法是循环直到 mAr 结束而不是 pAr并在索引上使用 % 将其缩减为 pAr 中的内容:

for (int i = 0; i < mAr.length; i++) {
mAr[i] = mAr[i] ^ pAr[i % pAr.length];
}

更高效的方式

一些更复杂但可能更有效的东西是:

for (int i = 0, j = 0; i < mAr.length; i++) {
mAr[i] = mAr[i] ^ pAr[j];

j++;
if (j == pAr.length) {
j = 0;
}
}

使用 ^= 使内容更具可读性

就像你可以使用+=一样,^=也是可用的,它不仅更短而且可以帮助读者很快知道 mAr[i] 实际上位于等号的左侧和右侧,无需花费额外的思考时间即可发现:

for (int i = 0; i < mAr.length; i++) {
mAr[i] ^= pAr[i % pAr.length];
}
for (int i = 0, j = 0; i < mAr.length; i++) {
mAr[i] ^= pAr[j];

j++;
if (j == pAr.length) {
j = 0;
}
}

关于java - CRC 校验和迭代 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52857190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com