求大佬帮帮忙,这个CRC校验C语言函数怎么改成JAVA的?顺便帮我解释下为什么最后要取反?谢谢你

shape_of_me 2018-10-19 11:16:27
// 计算给定长度数据的16 位CRC。
U16 GetCrc16(const U8* pData, int nLength)
{
U16 fcs = 0xffff; // 初始化
while(nLength>0){
fcs = (fcs >> 8) ^ crctab16[(fcs ^ *pData) & 0xff];
nLength--;
pData++;
}
return ~fcs; // 取反
}

crctab16[]是一个数组,

部分数组如下:
static const U16 crctab16[] =
{
0X0000, 0X1189, 0X2312, 0X329B, 0X4624, 0X57AD, 0X6536, 0X74BF,0X8C48, 0X9DC1,
0XAF5A, 0XBED3, 0XCA6C,
0XDBE5, 0XE97E, 0XF8F7,0X1081, 0X0108, 0X3393, 0X221A, 0X56A5, 0X472C, 0X75B7,
0X643E,0X9CC9, 0X8D40,......}
...全文
156 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2018-10-24
  • 打赏
  • 举报
回复

char GetCrc16(byte[] pData, int nLength)
 {
char fcs = 0xffff; // 初始化
int i = 0;
while(nLength>0){
 fcs = (fcs >> 8) ^ crctab16[(fcs ^ (char)pData[i]) & (char)0x00ff];
 nLength--;
 i++;
 }
 return ~fcs; // 取反
}
为何取反,那就看算法的需求

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧