假设我有:(数据)mod(多项式)
1110 0101 型号 1001
我知道我需要将多项式移到数据的最左边并执行 XOR 操作。
1110 0101
1001
我会得到一个结果
0111 0101
然后我需要设置多项式以在结果中找到下一个“1”并将多项式移动到该位置并执行下一个异或运算,并重复这些步骤直到我得到余数。
所以,我知道我需要将我的数据复制到一个数组并使用该数组我可以进行移位并使用 AND 运算符并将数据的第一位与多项式的第一位进行比较,如果我得到结果'1' 然后我就会知道我可以将多项式移动到那个位置。
这是我的代码片段:
uint8_t polyarray[4];
uint32_t dataarray[32];
uint64_t mod(int data, int poly, int i) {
memcpy(polyarray, (int[]) {1}, sizeof polyarray);
memcpy(dataarray, (int[]) {1,2,3,4}, sizeof dataarray);
for (i=127; i>=0; i--){
poly << i;
dataarray[4]>>31;
polyarray[1]>>3;
if(dataarray[4] & polyarray[1]=1){
data = data ^ poly;
}
}
我很确定我的代码不完整,但我不确定在哪里,有人可以帮助我吗?
我再次重做我的代码,这会更好吗?
void mod(uint8_t i, uint64_t *pPoly, uint64_t *pData)
{
uint64_t Data[128];
uint64_t Poly[4];
for(i=127; i>=0; i--)
{
Poly << i;
pData = &Data[i];
pPoly = &Poly[3];
if (pData = 1)
{
Data = Data^Poly;
}
else
{
Poly>>1;
i--;
}
}
}