关于CRC-16校验的问题,算出来的值不对,求救啊!

persempre 2008-08-03 06:48:57
MP3使用的CRC校验是CRC-16:X16+X15+X2+1


int main(){
char x0;
char x1;
char str[100]={0};
unsigned short reg,x3,tmp,x2;

strcpy(str,"90640000000000690500000800000D20A0000101C400F8780100005000198B002002");
x1=strlen(str);
reg=0xFFFF;
printf("\n%u",x1);
getchar(x0);
for(x2=0;x2<x1;x2++){
if(str[x2]<58) x3=str[x2]-48;
else x3=str[x2]-55;
for(x0=0;x0<4;x0++){
if( (reg^(x3<<12))&0x8000==0x8000 ) {reg<<=1;reg=reg^0x8005;}
else reg<<=1;
x3<<=1;
}
}

printf("\nREG: %x",reg);

getchar(x0);
return 0;
}

以上那一串是从某首MP3文件里的一帧里找出来的,正确的结果应该是 0xFBA3,我的结果却是0X8003
但是不知道怎么办了。而且CRC这里,还有位操作的顺序,都搞的我晕乎乎的!
...全文
293 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
persempre 2008-08-03
  • 打赏
  • 举报
回复
strcpy(str,"90640000000000690500000800000D20A0000101C400F8780100005000198B002002");

改成

strcpy(str,"10640000000000690500000800000D20A0000101C400F8780100005000198B002002");

2,554

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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