#include <stdio.h>
#include <stdlib.h>
bool dayin=true; //是否打印?
int main(){
?? ?
?? ?int i,k,g=0;
?? ?int n1=0,n2=0;
?? ?int good=0,bad=0;
?? ?double rate;
?? ?(dayin)? printf("打印具體數據\n"):printf("不打印具體數據\n\n");
?? ?FILE *fpRead=fopen("D:\\Alice.dat","r");
?? ?if(fpRead==NULL)
?? ?{
?? ??? ?return 111;
?? ?}
?? ?fseek(fpRead, 0, SEEK_END);
?? ?n1 = ftell(fpRead);
?? ?unsigned char *left = (unsigned char*)malloc(n1);
?? ?fseek(fpRead, 0, SEEK_SET);
?? ?fread(left, n1, 1, fpRead);
?? ?/*printf("left數組數據為:\n");
?? ?for(i=0;i<n1;i++){
?? ??? ?printf("%02X ", left[i]);
?? ?}*/
?? ?printf("\n共%d個\n\n",n1);
?? ?fclose(fpRead);
?? ?
?? ?FILE *fpRead2=fopen("D:\\Bob.dat","r");
?? ?if(fpRead2==NULL)
?? ?{
?? ??? ?free(left);
?? ??? ?return 222;
?? ?}
?? ?fseek(fpRead2, 0, SEEK_END);
?? ?n2 = ftell(fpRead2);
?? ?unsigned char *right = (unsigned char*)malloc(n2);
?? ?fseek(fpRead2, 0, SEEK_SET);
?? ?fread(right, n2, 1, fpRead2);
?? ?/*printf("right數組數據為:\n");
?? ?for(i=0;i<n2;i++){
?? ??? ?printf("%02X ", right[i]);
?? ?}*/
?? ?printf("\n共%d個\n\n",n2);
?? ?fclose(fpRead2);
?? ??? ?
?? ?
?? ?printf("檢查數據是否正確,按回車鍵進行下一步。\n");
?? ?getchar();
?? ?if(n1!=n2){
?? ??? ?printf("!兩邊數據個數不等!\n");
?? ??? ?free(left);
?? ??? ?free(right);
?? ??? ?return 333;
?? ?}?
?? ?if(n1%2!=0){
?? ??? ?printf("!二進制數據個數必須為偶數!\n");
?? ??? ?free(left);
?? ??? ?free(right);
?? ??? ?return 444;
?? ?}
?? ?printf("開始比對\n");
?? ?for(i=0;i<=n1-2;i++){ ?//有n1個數,對應編號left[n-1],為二進制中的第二個數,故只要循環至n1-2即可?
?? ??? ?if(i%2==1) ?continue; ?//每兩個01為一組?
?? ??? ?if(left[i]!=right[i]) { //若第一個數不同則跳過?
?? ??? ?g++;
?? ??? ?continue;
?? ??? ?} ?
?? ??? ?if(left[i+1]==right[i+1]) good++;
?? ??? ?else {
?? ??? ?bad++;
?? ??? ?if(dayin==true)printf("第%d組數不同,分別為%d%d和%d%d\n",i/2+1,left[i],left[i+1],right[i],right[i+1]);?
?? ?}
?? ?}
?? ?if((g+good+bad)!=(n1/2)){
?? ??? ?printf("比對過程中數據遺漏?");
?? ??? ?free(left);
?? ??? ?free(right);
?? ??? ?return 555;?
?? ?}?
?? ?
?? ?rate=(double)bad/(double)(good+bad)*100;
?? ?printf("結果:\n基不同的共%d組。相同的二進制共%d組,不同的有%d組,誤碼率為%g%%\n",g,good,bad,rate);
?? ?printf("比對結束\n");
?? ?free(left);
?? ?free(right);
?? ?system("pause");
?? ?return 666;
}