几种求CRC-CCITT的方法 [C/C#]

时间:2021-12-27 16:40:17

// 所有原创文章转载请注明作者及链接
//
blackboycpp(AT)gmail.com
// QQ群: 135202158

 

 

几种求CRC-CCITT的方法 [C/C#]

 

方法1:将存有数据的字节数组进行逐位计算,求得字节形式的CRC 

几种求CRC-CCITT的方法 [C/C#]void crc16(byte d[], int len)
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]
{
几种求CRC-CCITT的方法 [C/C#]        
byte b = 0;
几种求CRC-CCITT的方法 [C/C#]        
ushort crc = 0xffff;
几种求CRC-CCITT的方法 [C/C#]        
int i, j;
几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]        
for(i=0; i<len; i++)
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]        
{        
几种求CRC-CCITT的方法 [C/C#]                
for(j=0; j<8; j++)
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]                
{
几种求CRC-CCITT的方法 [C/C#]                        b 
= ((d[i]<<j)&0x80^ ((crc&0x8000)>>8);
几种求CRC-CCITT的方法 [C/C#]                        
几种求CRC-CCITT的方法 [C/C#]                        crc
<<=1;
几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]                        
if(b!=0)        crc^=0x1021;
几种求CRC-CCITT的方法 [C/C#]                }

几种求CRC-CCITT的方法 [C/C#]        }

几种求CRC-CCITT的方法 [C/C#]        crc 
= ~crc;
几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]        printf(
"crc: 0x%.4X ", crc);
几种求CRC-CCITT的方法 [C/C#]}

 

方法2:提前构造0~255的CRC表,利用查表法计算CRC

几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]ushort crc_table[256]=
几种求CRC-CCITT的方法 [C/C#]        
0x00000x10210x20420x30630x40840x50a50x60c60x70e7
几种求CRC-CCITT的方法 [C/C#]        
0x81080x91290xa14a0xb16b0xc18c0xd1ad0xe1ce0xf1ef
几种求CRC-CCITT的方法 [C/C#]        
0x12310x02100x32730x22520x52b50x42940x72f70x62d6
几种求CRC-CCITT的方法 [C/C#]        
0x93390x83180xb37b0xa35a0xd3bd0xc39c0xf3ff0xe3de
几种求CRC-CCITT的方法 [C/C#]        
0x24620x34430x04200x14010x64e60x74c70x44a40x5485
几种求CRC-CCITT的方法 [C/C#]        
0xa56a0xb54b0x85280x95090xe5ee0xf5cf0xc5ac0xd58d
几种求CRC-CCITT的方法 [C/C#]        
0x36530x26720x16110x06300x76d70x66f60x56950x46b4
几种求CRC-CCITT的方法 [C/C#]        
0xb75b0xa77a0x97190x87380xf7df0xe7fe0xd79d0xc7bc
几种求CRC-CCITT的方法 [C/C#]        
0x48c40x58e50x68860x78a70x08400x18610x28020x3823
几种求CRC-CCITT的方法 [C/C#]        
0xc9cc0xd9ed0xe98e0xf9af0x89480x99690xa90a0xb92b
几种求CRC-CCITT的方法 [C/C#]        
0x5af50x4ad40x7ab70x6a960x1a710x0a500x3a330x2a12
几种求CRC-CCITT的方法 [C/C#]        
0xdbfd0xcbdc0xfbbf0xeb9e0x9b790x8b580xbb3b0xab1a
几种求CRC-CCITT的方法 [C/C#]        
0x6ca60x7c870x4ce40x5cc50x2c220x3c030x0c600x1c41
几种求CRC-CCITT的方法 [C/C#]        
0xedae0xfd8f0xcdec0xddcd0xad2a0xbd0b0x8d680x9d49
几种求CRC-CCITT的方法 [C/C#]        
0x7e970x6eb60x5ed50x4ef40x3e130x2e320x1e510x0e70
几种求CRC-CCITT的方法 [C/C#]        
0xff9f0xefbe0xdfdd0xcffc0xbf1b0xaf3a0x9f590x8f78
几种求CRC-CCITT的方法 [C/C#]        
0x91880x81a90xb1ca0xa1eb0xd10c0xc12d0xf14e0xe16f
几种求CRC-CCITT的方法 [C/C#]        
0x10800x00a10x30c20x20e30x50040x40250x70460x6067
几种求CRC-CCITT的方法 [C/C#]        
0x83b90x93980xa3fb0xb3da0xc33d0xd31c0xe37f0xf35e
几种求CRC-CCITT的方法 [C/C#]        
0x02b10x12900x22f30x32d20x42350x52140x62770x7256
几种求CRC-CCITT的方法 [C/C#]        
0xb5ea0xa5cb0x95a80x85890xf56e0xe54f0xd52c0xc50d
几种求CRC-CCITT的方法 [C/C#]        
0x34e20x24c30x14a00x04810x74660x64470x54240x4405
几种求CRC-CCITT的方法 [C/C#]        
0xa7db0xb7fa0x87990x97b80xe75f0xf77e0xc71d0xd73c
几种求CRC-CCITT的方法 [C/C#]        
0x26d30x36f20x06910x16b00x66570x76760x46150x5634
几种求CRC-CCITT的方法 [C/C#]        
0xd94c0xc96d0xf90e0xe92f0x99c80x89e90xb98a0xa9ab
几种求CRC-CCITT的方法 [C/C#]        
0x58440x48650x78060x68270x18c00x08e10x38820x28a3
几种求CRC-CCITT的方法 [C/C#]        
0xcb7d0xdb5c0xeb3f0xfb1e0x8bf90x9bd80xabbb0xbb9a
几种求CRC-CCITT的方法 [C/C#]        
0x4a750x5a540x6a370x7a160x0af10x1ad00x2ab30x3a92
几种求CRC-CCITT的方法 [C/C#]        
0xfd2e0xed0f0xdd6c0xcd4d0xbdaa0xad8b0x9de80x8dc9
几种求CRC-CCITT的方法 [C/C#]        
0x7c260x6c070x5c640x4c450x3ca20x2c830x1ce00x0cc1
几种求CRC-CCITT的方法 [C/C#]        
0xef1f0xff3e0xcf5d0xdf7c0xaf9b0xbfba0x8fd90x9ff8
几种求CRC-CCITT的方法 [C/C#]        
0x6e170x7e360x4e550x5e740x2e930x3eb20x0ed10x1ef0 
几种求CRC-CCITT的方法 [C/C#]}

几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]
void crc16(byte d[], int len)
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]
{
几种求CRC-CCITT的方法 [C/C#]        
byte b = 0, hbit = 0;
几种求CRC-CCITT的方法 [C/C#]        
ushort crc = 0xffff;
几种求CRC-CCITT的方法 [C/C#]        
int i;
几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]        
for(i=0; i<len; i++)
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]        
{        
几种求CRC-CCITT的方法 [C/C#]                hbit 
= (crc&0xff00)>>8;
几种求CRC-CCITT的方法 [C/C#]                crc
<<=8;
几种求CRC-CCITT的方法 [C/C#]                crc 
^= crc_table[hbit^d[i]];
几种求CRC-CCITT的方法 [C/C#]        }

几种求CRC-CCITT的方法 [C/C#]        
几种求CRC-CCITT的方法 [C/C#]        crc 
= ~crc;
几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]        printf(
"crc: 0x%.4X ", crc);        
几种求CRC-CCITT的方法 [C/C#]}

几种求CRC-CCITT的方法 [C/C#]

 

方法3:完整C#版本 - 算法与方法2同

几种求CRC-CCITT的方法 [C/C#]using System;
几种求CRC-CCITT的方法 [C/C#]
using System.Collections.Generic;
几种求CRC-CCITT的方法 [C/C#]
using System.Text;
几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]
namespace CrcTest
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]
{
几种求CRC-CCITT的方法 [C/C#]    
class Program
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]    
{
几种求CRC-CCITT的方法 [C/C#]        
static ushort[] crc_table =
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]        
{
几种求CRC-CCITT的方法 [C/C#]                
0x00000x10210x20420x30630x40840x50a50x60c60x70e7
几种求CRC-CCITT的方法 [C/C#]                
0x81080x91290xa14a0xb16b0xc18c0xd1ad0xe1ce0xf1ef
几种求CRC-CCITT的方法 [C/C#]                
0x12310x02100x32730x22520x52b50x42940x72f70x62d6
几种求CRC-CCITT的方法 [C/C#]                
0x93390x83180xb37b0xa35a0xd3bd0xc39c0xf3ff0xe3de
几种求CRC-CCITT的方法 [C/C#]                
0x24620x34430x04200x14010x64e60x74c70x44a40x5485
几种求CRC-CCITT的方法 [C/C#]                
0xa56a0xb54b0x85280x95090xe5ee0xf5cf0xc5ac0xd58d
几种求CRC-CCITT的方法 [C/C#]                
0x36530x26720x16110x06300x76d70x66f60x56950x46b4
几种求CRC-CCITT的方法 [C/C#]                
0xb75b0xa77a0x97190x87380xf7df0xe7fe0xd79d0xc7bc
几种求CRC-CCITT的方法 [C/C#]                
0x48c40x58e50x68860x78a70x08400x18610x28020x3823
几种求CRC-CCITT的方法 [C/C#]                
0xc9cc0xd9ed0xe98e0xf9af0x89480x99690xa90a0xb92b
几种求CRC-CCITT的方法 [C/C#]                
0x5af50x4ad40x7ab70x6a960x1a710x0a500x3a330x2a12
几种求CRC-CCITT的方法 [C/C#]                
0xdbfd0xcbdc0xfbbf0xeb9e0x9b790x8b580xbb3b0xab1a
几种求CRC-CCITT的方法 [C/C#]                
0x6ca60x7c870x4ce40x5cc50x2c220x3c030x0c600x1c41
几种求CRC-CCITT的方法 [C/C#]                
0xedae0xfd8f0xcdec0xddcd0xad2a0xbd0b0x8d680x9d49
几种求CRC-CCITT的方法 [C/C#]                
0x7e970x6eb60x5ed50x4ef40x3e130x2e320x1e510x0e70
几种求CRC-CCITT的方法 [C/C#]                
0xff9f0xefbe0xdfdd0xcffc0xbf1b0xaf3a0x9f590x8f78
几种求CRC-CCITT的方法 [C/C#]                
0x91880x81a90xb1ca0xa1eb0xd10c0xc12d0xf14e0xe16f
几种求CRC-CCITT的方法 [C/C#]                
0x10800x00a10x30c20x20e30x50040x40250x70460x6067
几种求CRC-CCITT的方法 [C/C#]                
0x83b90x93980xa3fb0xb3da0xc33d0xd31c0xe37f0xf35e
几种求CRC-CCITT的方法 [C/C#]                
0x02b10x12900x22f30x32d20x42350x52140x62770x7256
几种求CRC-CCITT的方法 [C/C#]                
0xb5ea0xa5cb0x95a80x85890xf56e0xe54f0xd52c0xc50d
几种求CRC-CCITT的方法 [C/C#]                
0x34e20x24c30x14a00x04810x74660x64470x54240x4405
几种求CRC-CCITT的方法 [C/C#]                
0xa7db0xb7fa0x87990x97b80xe75f0xf77e0xc71d0xd73c
几种求CRC-CCITT的方法 [C/C#]                
0x26d30x36f20x06910x16b00x66570x76760x46150x5634
几种求CRC-CCITT的方法 [C/C#]                
0xd94c0xc96d0xf90e0xe92f0x99c80x89e90xb98a0xa9ab
几种求CRC-CCITT的方法 [C/C#]                
0x58440x48650x78060x68270x18c00x08e10x38820x28a3
几种求CRC-CCITT的方法 [C/C#]                
0xcb7d0xdb5c0xeb3f0xfb1e0x8bf90x9bd80xabbb0xbb9a
几种求CRC-CCITT的方法 [C/C#]                
0x4a750x5a540x6a370x7a160x0af10x1ad00x2ab30x3a92
几种求CRC-CCITT的方法 [C/C#]                
0xfd2e0xed0f0xdd6c0xcd4d0xbdaa0xad8b0x9de80x8dc9
几种求CRC-CCITT的方法 [C/C#]                
0x7c260x6c070x5c640x4c450x3ca20x2c830x1ce00x0cc1
几种求CRC-CCITT的方法 [C/C#]                
0xef1f0xff3e0xcf5d0xdf7c0xaf9b0xbfba0x8fd90x9ff8
几种求CRC-CCITT的方法 [C/C#]                
0x6e170x7e360x4e550x5e740x2e930x3eb20x0ed10x1ef0 
几种求CRC-CCITT的方法 [C/C#]        }

几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]        
static byte[] data =
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]        
{
几种求CRC-CCITT的方法 [C/C#]                
0xF00x000x100x000xA20x000x000x940x910x5B0x020x000xEC0x600x6F0x1C,
几种求CRC-CCITT的方法 [C/C#]                
0xA20x4C0x650x570x530xA10xB00x580x000x0A0x4F0xD80xE80xA70x550xF0,
几种求CRC-CCITT的方法 [C/C#]                
0x240xEE0x160x520x0A0x080x5F0x0F0x7F0xC00x000x000x4D 
几种求CRC-CCITT的方法 [C/C#]        }
;
几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]        
static void Main(string[] args)
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]        
{
几种求CRC-CCITT的方法 [C/C#]            Console.WriteLine( 
"0x{0,4:X}", getCRC_CCITT(data, data.Length));
几种求CRC-CCITT的方法 [C/C#]            Console.Read();
几种求CRC-CCITT的方法 [C/C#]        }

几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]        
public static ushort getCRC_CCITT(byte[] data, int len)
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]        
{
几种求CRC-CCITT的方法 [C/C#]            
byte hbit = 0;
几种求CRC-CCITT的方法 [C/C#]            
ushort crc = 0xffff;
几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]            
for (int i = 0; i < len; i++)
几种求CRC-CCITT的方法 [C/C#]几种求CRC-CCITT的方法 [C/C#]            
{
几种求CRC-CCITT的方法 [C/C#]                hbit 
= (byte)((crc & 0xff00>> 8);
几种求CRC-CCITT的方法 [C/C#]                crc 
<<= 8;
几种求CRC-CCITT的方法 [C/C#]                crc 
^= crc_table[hbit ^ data[i]];
几种求CRC-CCITT的方法 [C/C#]            }

几种求CRC-CCITT的方法 [C/C#]            crc 
= (ushort)~crc;
几种求CRC-CCITT的方法 [C/C#]
几种求CRC-CCITT的方法 [C/C#]            
return crc;
几种求CRC-CCITT的方法 [C/C#]        }

几种求CRC-CCITT的方法 [C/C#]    }

几种求CRC-CCITT的方法 [C/C#]}

几种求CRC-CCITT的方法 [C/C#]