免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
循環(huán)冗余校驗(yàn)碼CRC算法的C++實(shí)現(xiàn)

Cyclic Redundancy Check循環(huán)冗余檢驗(yàn),是基于數(shù)據(jù)計(jì)算一組效驗(yàn)碼,用于核對(duì)數(shù)據(jù)傳輸過程中是否被更改或傳輸錯(cuò)誤。

完整的CRC-32標(biāo)準(zhǔn)所包含的內(nèi)容:

引用
Name            : "CRC-32"
Width           : 32
Poly            : 04C11DB7
Initial value   : FFFFFFFF
Reflected       : True
XOR out with    : FFFFFFFF


下面是CRC-16標(biāo)準(zhǔn):

引用
Name            : "CRC-16"
Width           : 16
Poly            : 8005
Initial value   : 0000
Reflected       : True
XOR out with    : 0000


下面的多項(xiàng)式值的得到,是通過對(duì)Poly逆向計(jì)算得到的:

引用

0000 0100 1100 0001 0001 1101 1011 0111-->
0    4    C    1    1    D    B    7     |========04C11DB7
<-----------------------------------------
1110 1101 1011 1000 1000 0011 0010 0000
E    D    B    8     8   3    2    0      ========EDB88320


具體實(shí)現(xiàn)如下:
view plaincopy to clipboardprint?
/* 
 *  函數(shù)名:GetCrc32 
 *  函數(shù)原型:unsigned int GetCrc32(char* InStr,unsigned int len) 
 *      參數(shù):InStr  ---指向需要計(jì)算CRC32值的字符串 
 *          len  ---為InStr的長(zhǎng)度 
 *      返回值為計(jì)算出來的CRC32結(jié)果。 
 * 
 *  函數(shù)名:GetCrc16 
 *  函數(shù)原型:unsigned short GetCrc16(char* InStr,unsigned int len) 
 *      參數(shù):InStr  ---指向需要計(jì)算CRC32值的字符串 
 *          len  ---為InStr的長(zhǎng)度 
 *      返回值為計(jì)算出來的CRC32結(jié)果。 
 * 
 *    2009/03/26   Edit By iawen 
 * 
 */ 
   
#include"GetCrcValue.h"  
 
unsigned int GetCrc32(char* InStr,unsigned int len){     
  //生成Crc32的查詢表  
  unsigned int Crc32Table[256];   
  int i,j;     
  unsigned int Crc;     
  for (i = 0; i < 256; i++){     
    Crc = i;     
    for (j = 0; j < 8; j++){     
      if (Crc & 1)     
        Crc = (Crc >> 1) ^ 0xEDB88320;     
      else    
        Crc >>= 1;   
    }     
    Crc32Table[i] = Crc;     
  }     
 
  //開始計(jì)算CRC32校驗(yàn)值  
  Crc=0xffffffff;     
  for(int i=0; i<len; i++){       
    Crc = (Crc >> 8) ^ Crc32Table[(Crc & 0xFF) ^ InStr[i]];     
  }  
    
  Crc ^= 0xFFFFFFFF;  
  return Crc;     
}     
 
unsigned short GetCrc16(char* InStr,unsigned int len){     
  //生成Crc16的查詢表  
  unsigned short Crc16Table[256];   
  unsigned int i,j;  
  unsigned short Crc;     
  for (i = 0; i < 256; i++){    
    Crc = i;     
    for (j = 0; j < 8; j++){     
      if(Crc & 0x1)     
        Crc = (Crc >> 1) ^ 0xA001;     
      else    
        Crc >>= 1;   
    }     
    Crc16Table[i] = Crc;     
  }  
    
  //開始計(jì)算CRC16校驗(yàn)值  
  Crc=0x0000;       
  for(i=0; i<len; i++){       
    Crc = (Crc >> 8) ^ Crc16Table[(Crc & 0xFF) ^ InStr[i]];    
 
  }  
  //Crc ^= 0x0000;    
  return Crc;     
}   
/*
 *  函數(shù)名:GetCrc32
 *  函數(shù)原型:unsigned int GetCrc32(char* InStr,unsigned int len)
 *      參數(shù):InStr  ---指向需要計(jì)算CRC32值的字符串
 *          len  ---為InStr的長(zhǎng)度
 *      返回值為計(jì)算出來的CRC32結(jié)果。
 *
 *  函數(shù)名:GetCrc16
 *  函數(shù)原型:unsigned short GetCrc16(char* InStr,unsigned int len)
 *      參數(shù):InStr  ---指向需要計(jì)算CRC32值的字符串
 *          len  ---為InStr的長(zhǎng)度
 *      返回值為計(jì)算出來的CRC32結(jié)果。
 *
 *    2009/03/26   Edit By iawen
 *
 */
 
#include"GetCrcValue.h"

unsigned int GetCrc32(char* InStr,unsigned int len){  
  //生成Crc32的查詢表
  unsigned int Crc32Table[256];
  int i,j;  
  unsigned int Crc;  
  for (i = 0; i < 256; i++){  
    Crc = i;  
    for (j = 0; j < 8; j++){  
      if (Crc & 1)  
        Crc = (Crc >> 1) ^ 0xEDB88320;  
      else 
        Crc >>= 1;
    }  
    Crc32Table[i] = Crc;  
  }  

  //開始計(jì)算CRC32校驗(yàn)值
  Crc=0xffffffff;  
  for(int i=0; i<len; i++){    
    Crc = (Crc >> 8) ^ Crc32Table[(Crc & 0xFF) ^ InStr[i]];  
  }
 
  Crc ^= 0xFFFFFFFF;
  return Crc;  
}  

unsigned short GetCrc16(char* InStr,unsigned int len){  
  //生成Crc16的查詢表
  unsigned short Crc16Table[256];
  unsigned int i,j;
  unsigned short Crc;  
  for (i = 0; i < 256; i++){ 
    Crc = i;  
    for (j = 0; j < 8; j++){  
      if(Crc & 0x1)  
        Crc = (Crc >> 1) ^ 0xA001;  
      else 
        Crc >>= 1;
    }  
    Crc16Table[i] = Crc;  
  }
 
  //開始計(jì)算CRC16校驗(yàn)值
  Crc=0x0000;    
  for(i=0; i<len; i++){    
    Crc = (Crc >> 8) ^ Crc16Table[(Crc & 0xFF) ^ InStr[i]]; 

  }
  //Crc ^= 0x0000; 
  return Crc;  

調(diào)用示例代碼:
view plaincopy to clipboardprint?
#include<iostream>  
#include"GetCrcValue.h"  
using namespace std;  
 
int main(){  
  char str[]="iawen";  
  unsigned int crc=GetCrc32(str,5);  
    
  printf("%08X\n",crc);  
    
  crc=GetCrc16(str,5);//0x5359  
  printf("%04X\n",crc);  
  return 0;  

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
CRC算法
CRC32(c語言 源碼)
計(jì)算機(jī)、單片機(jī)(M16)收、發(fā)自如modbus
【原】以太網(wǎng)幀F(xiàn)CS校驗(yàn)碼CRC32的三種實(shí)現(xiàn)方法
32位CRC校驗(yàn)代碼及其應(yīng)用
探究CRC32算法實(shí)現(xiàn)原理-why table-driven implemention
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服