Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java和C中生成CRC_Java_C_Crc32 - Fatal编程技术网

在Java和C中生成CRC

在Java和C中生成CRC,java,c,crc32,Java,C,Crc32,这里是我的C代码 unsigned int crc32b(unsigned char *message) { int i, j; unsigned int byte, crc, mask; i = 0; crc = 0xFFFFFFFF; while (message[i] != 0) { byte = message[i]; // Get next byte. crc = crc ^ byte; for

这里是我的C代码

unsigned int crc32b(unsigned char *message) {
   int i, j;
   unsigned int byte, crc, mask;

   i = 0;
   crc = 0xFFFFFFFF;
   while (message[i] != 0) {
      byte = message[i];            // Get next byte.
      crc = crc ^ byte;
      for (j = 7; j >= 0; j--) {    // Do eight times.
         mask = -(crc & 1);
         crc = (crc >> 1) ^ (0xEDB88320 & mask);
      }
      i = i + 1;
   }
   return ~crc;
}
但在Java中,不支持unsignint。所以我尝试通过&0xFFFFFF获得unsign


但这是错误的。如何在java中修复它

您可以轻松地用java中的有符号整数模拟大多数无符号算术(有些事情更烦人,例如除法,但这里不使用)

这特别容易,
0xFFFFFFFF
就是它本身,也称为-1

>
应替换为其未签名的对应项
>

必须屏蔽消息中的
字节
,才能撤消符号扩展

总计(未测试)

int crc32b(字节[]消息){
int i,j;
int b,crc,mask;
i=0;
crc=-1;
while(i=0;j--){//执行八次。
掩码=-(crc&1);
crc=(crc>>>1)^(0xEDB88320&掩码);
}
i=i+1;
}
返回~crc;
}

不过,这还是有点C风格。

用Java显示您的代码,我们可能会帮助您;)这可能有助于:
int crc32b(byte[] message) {
   int i, j;
   int b, crc, mask;

   i = 0;
   crc = -1;
   while (i < message.length) {
      b = message[i] & 0xFF;        // Get next byte.
      crc = crc ^ b;
      for (j = 7; j >= 0; j--) {    // Do eight times.
         mask = -(crc & 1);
         crc = (crc >>> 1) ^ (0xEDB88320 & mask);
      }
      i = i + 1;
   }
   return ~crc;
}