|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
MP3使用的CRC校验是CRC-16:X16+X15+X2+1 。我现在还在学习文档,用C语言读取MP3做试验。CRC-16这里怎么算都不对。
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);
//从ASCII换成数值
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++){
//用CRC-16做异或,按照电路的意义来
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这里,还有位操作的顺序,都搞的我晕乎乎的! |
|