您好我发现了一个C ++实现,但它不起作用。这里:
unsigned int crc32(unsigned char* message) {
int i, j;
unsigned int byte, crc, mask;
i = 0;
crc = 0xFFFFFFFF;
while(message[i] != 0) {
byte = message[i];
crc = crc ^ byte;
for(j=7; j>=0; j--){
for(j=0; j>= 0; j--) {
mask = -(crc & 1);
crc = (crc >> 1) ^ (0xEDB88320 & mask);
}
i = i + 1;
}
return ~crc;
}
}
int main()
{
unsigned char a='a';
crc32(&a);
cout<return 0;
它表示一元运算符应用于无符号类型,结果仍未签名。
当我删除减号时,它不会给我一个真正的CRC代码。
答案 0 :(得分:1)
crc32
函数调用以null结尾的消息,因此将指针传递给char
变量是不好的。cout<return 0;
没有意义。for(j=7; j>=0; j--){
和for(j=0; j>= 0; j--) {
之间存在循环变量冲突。删除内部循环,因为它是一次性循环,它不必是循环。i = i + 1;
和return ~crc;
位置错误。您应该正确格式化代码。-(crc & 1)
来获取0xFFFFFFFF
。更正后的代码:
#include <iostream>
using std::cout;
unsigned int crc32(unsigned char* message) {
int i, j;
unsigned int byte, crc;
i = 0;
crc = 0xFFFFFFFF;
while(message[i] != 0) {
byte = message[i];
crc = crc ^ byte;
for(j=7; j>=0; j--){
crc = (crc >> 1) ^ (crc & 1 ? 0xEDB88320 : 0);
}
i = i + 1;
}
return ~crc;
}
int main()
{
unsigned char a[] = {'a', 0};
cout << crc32(a);
return 0;
}