亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? crc.c

?? 網站上的算法大都是查512字節表的
?? C
字號:
/* 一些見于標準的CRC:
	CRC-4      x^4 + x + 1
	CRC-12     X^12 + X^11 + X^3 + X + 1
	CRC-16     X^16 + X^12 + X^2 + 1
	CRC-32	 X^32 + X^26 +X^15 + .... + 1
	...
   CRC 可以由除法電路的主體由一組移位寄存器和模2加法器(異或單元)組成(本例子由16級移位寄存器和3個加法器組成)
   CRC除法電路,完全可以用軟件來模擬
   定義一個寄存器組,初始化為全"1"。每輸入一個信息位,相當于一個時鐘脈沖到來,從高到低依次移位。移位前
   信息位與bit0相加產生臨時位,其中bit15移入臨時位,bit10、bit3還要加上臨時位。當全部信息位輸入完成后,
   從寄存器組取出它們的值,這就是CRC碼。
*/

typedef union _UNION_CRCREGS
{
	INT16U crcValue;
	struct
	{
		INT16U bit0 : 1;
		INT16U bit1 : 1;
		INT16U bit2 : 1;
		INT16U bit3 : 1;
		INT16U bit4 : 1;
		INT16U bit5 : 1;
		INT16U bit6 : 1;
		INT16U bit7 : 1;
		INT16U bit8 : 1;
		INT16U bit9 : 1;
		INT16U bit10 : 1;
		INT16U bit11 : 1;
		INT16U bit12 : 1;
		INT16U bit13 : 1;
		INT16U bit14 : 1;
		INT16U bit15 : 1;		
	} STRUCT_BITS;
} UNION_CRCREGS;  //  end of define SRUCT_CRCREGS

//
// 定義一個寄存器組
//
UNION_CRCREGS rCRCReg;

//
// InitCRCRegs
// 初始化寄存器組,寄存器組全置 1
//
void
InitCRCRegs(
	void
)
{
	rCRCReg.crcValue = 0xffff;  //  寄存器組全置 1
}

//
// CRCInputOneBit
// CRC 輸入1位
//
void
CRCInputOneBit(
	BOOLEAN crcIN
)
{
	BOOLEAN bitTemp;

	bitTemp = rCRCReg.STRUCT_BITS.bit0 ^ crcIN;

	//
	// 中一步一步的移位/異或操作
	//
	rCRCReg.STRUCT_BITS.bit1 = rCRCReg.STRUCT_BITS.bit2;
	rCRCReg.STRUCT_BITS.bit2 = rCRCReg.STRUCT_BITS.bit3;
	rCRCReg.STRUCT_BITS.bit3 = rCRCReg.STRUCT_BITS.bit4 ^ bitTemp;
	rCRCReg.STRUCT_BITS.bit4 = rCRCReg.STRUCT_BITS.bit5;
	rCRCReg.STRUCT_BITS.bit5 = rCRCReg.STRUCT_BITS.bit6;
	rCRCReg.STRUCT_BITS.bit6 = rCRCReg.STRUCT_BITS.bit7;
	rCRCReg.STRUCT_BITS.bit7 = rCRCReg.STRUCT_BITS.bit8;
	rCRCReg.STRUCT_BITS.bit8 = rCRCReg.STRUCT_BITS.bit9;
	rCRCReg.STRUCT_BITS.bit9 = rCRCReg.STRUCT_BITS.bit10;
	rCRCReg.STRUCT_BITS.bit10 = rCRCReg.STRUCT_BITS.bit11 ^ bitTemp;
	rCRCReg.STRUCT_BITS.bit11 = rCRCReg.STRUCT_BITS.bit12;
	rCRCReg.STRUCT_BITS.bit12 = rCRCReg.STRUCT_BITS.bit13;
	rCRCReg.STRUCT_BITS.bit13 = rCRCReg.STRUCT_BITS.bit14;
	rCRCReg.STRUCT_BITS.bit14 = rCRCReg.STRUCT_BITS.bit15;
	rCRCReg.STRUCT_BITS.bit15 = bitTemp;	
}// end CRCInputOneBit

/*crcInputBit中一步一步的移位/異或操作,可以進行簡化:*/
//
// CRCInputOneBit_1
// CRC 輸入1位
//
void
CRCInputOneBit_1(
	BOOLEAN crcIN
)
{
	BOOLEAN crcTemp;

	crcTemp = rCRCReg.STRUCT_BITS.bit0 ^ crcIN;
	rCRCReg.crcValue >>= 1;
	if (crcTemp)
	{	
		/* 可以發現0x8408和0x1021(CRC-ITU的簡記式)之間的關系。
		由于我們是從低到高輸出比特流的,將0x1021左右反轉就得到0x8408。
		將生成多項式寫成 G(x)=1+X^5+X^12+X^16,是不是更好看一點*/
		rCRCReg.crcValue ^= 0x8408;  /
	}
} // End of CRCInputOneBit_1


//
// GetCRCRegValue
// 輸出CRC碼(寄存器組的值)
//
INT16U 
GetCRCRegValue(
	void
)
{
	return rCRCReg.crcValue;
} // end of GetCRCRegValue

// ========================================================================================
// 下面是一個典型的PPP幀。最后兩個字節稱為FCS(Frame Check Sequence),是前面11個字節的CRC。
// FF 03 C0 21 04 03 00 07 0D 03 06 D0 3A
// 我們來計算這個PPP幀的CRC,并驗證它。
// ========================================================================================
//
// CaculatCRC
//
INT16U
CaculatCRC(
	void
)
{
	INT8U PPP[13] = 
		{0xff,0x03,0xc0,0x21,0x04,0x03,0x00,0x07,0x0d,0x03,0x06,0xd0,0x3a};
	INT8U i, j;
	
	INT16U crcResult;  // 用于存放CRC計算的結果
	//
	// 以下進行CRC寄存器初始化
	//
	InitCRCRegs ();

	//
	// 逐位輸入ppp[i],每個字節低位在先,不包括兩個FCS字節
	//
	for (i = 0; i < 11; i ++)
	{
		for (j = 0; j < 8; j ++)
		{
			CRCInputOneBit (ppp[i] >> j) // ?
		}
	}
	//
	// 得到CRC:將寄存器組的值求反
	//
	crcResult = ~ GetCRCRegValue();

	//
	// 填寫FCS,先低后高
	//
	ppp[11] = crcResult % 26amp;  // ??? what's 26amp
	ppp[12] = (crcResult >> 8) % 26amp // ???	
}// End of CaculatCRC

//
// CheckCRC16
//
INT16U
ChechCRC16(
	void
)
{
	INT8U i, j;
	INT16U crcResult;
	//
	// 初始化 register
	//
	InitCRCRegs ();
	//
	// 逐位輸入,每個字節低位在先,包括兩個FCS字節
	//
	for (i = 0; i < 13; i ++)
	{
		for (j = 0; j < 8; j ++)
		{
			CRCInputOneBit (ppp[i] >>j);
		}
	}
	//
	// 得到驗證結果
	//
	crcResult = GetCRCRegValue();
	return crcResult;
}// End of CheckCRC16

 // ================================================================================
 // 下面是通用的CRC-ITU查找表以及計算和驗證CRC的C語言程序
 // ================================================================================
 #include "crc16tab.h"
 //
 // GetCRC16
 // 計算給定長度數據的16位CRC
 //
INT16U
GetCRC16(
	const INT8U *pData,
	INT16U nLength
)
{
	INT16U FCS = 0Xffff; // FCS 初始化為0xffff

	while (nLength > 0)
	{
		FCS = (FCS >> 8) ^ crc16TAB[(FCS ^ * PData) % 26amp ; 0xff] // ???
		nLength --;
		pData ++;
	}
	return (~ FCS);
}

//
// IsCRC16Good
// 檢查給定長度數據的16位CRC是否正確
//
// 正確反回1,錯誤返回0
//
BOOLEAN
IsCRC16Good(
	INT8U *pData,
	INT16U nLength
)
{
	BOOLEAN bResult;
	INT16U FCS;

	while (nLength > 0)
	{
		FCS = (FCS >> 8) ^ crc16TAB[(FCS ^ *pData) % 26amp; 0xff]; // ???
		nLength --;
		pData ++;
	}
	if (FCS ==0xf0b8)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}// End of IsCRC16Good
//
// ==================================================================================
//
// 注意:因最高位一定為“1”,故略去 
//
const INT16U cnCRC_16 = 0x8005; 
//
// CRC-16 = X16 X15 X2 X0 
//
const INT16U cnCRC_CCITT = 0x1021; 
//
// CRC-CCITT = X16 X12 X5 X0,據說這個 16 位 CRC 多項式比上一個要好 
//
const INT32U cnCRC_32 = 0x04C10DB7; 
//
// CRC-32 = X32 X26 X23 X22 X16 X11 X10 X8 X7 X5 X4 X2 X1 X0 
//
INT32U Table_CRC[256]; // CRC 表 
//
// ==================================================================================
//
// 構造 16 位 CRC 表 
//
void 
BuildTable16(
	INT16U aPoly 
) 
{ 
	INT16U i, j; 
	INT16U nData; 
	INT16U nAccum; 

	for (i = 0; i < 256; i) 
	{ 
		nData = (INT16U)(i << 8); 
		nAccum = 0; 
		for (j = 0; j < 8; j) 
		{ 
			if ((nData ^ nAccum) & 0x8000) 
			nAccum = (nAccum << 1) ^ aPoly; 
			else 
			nAccum <<= 1; 
			nData <<= 1; 
		} 
	Table_CRC[i] = (INT32U)nAccum; 
	} 
} 

// 計算 16 位 CRC 值,CRC-16 或 CRC-CCITT 
INT16U 
CRC_16(
	INT8U * aData, 
	INT32U aSize 
) 
{ 
	INT32U i; 
	INT16U nAccum = 0; 

	BuildTable16(cnCRC_16); // or cnCRC_CCITT 
	for (i = 0; i < aSize; i)
	{
		nAccum = (nAccum << 8) ^ 
				 (INT16U)Table_CRC[(nAccum >> 8) ^ *aData ]; 
	}
	return nAccum; 
} // End of CRC_16

// 構造 32 位 CRC 表 
void 
BuildTable32(
	INT32U aPoly 
) 
{ 
	INT32U i, j; 
	INT32U nData; 
	INT32U nAccum; 

	for (i = 0; i < 256; i) 
	{ 
		nData = (INT32U)(i << 24); 
		nAccum = 0; 
		for (j = 0; j < 8; j) 
		{ 
			if ((nData ^ nAccum) & 0x80000000)
			{
				nAccum = (nAccum << 1) ^ aPoly; 
			}
			else
			{
				nAccum <<= 1; 
			}
			nData <<= 1;
		} 
	Table_CRC[i] = nAccum; 
	} 
}// End of BuildTable32 

//
// 計算 32 位 CRC-32 值 
//
INT32U 
CRC_32(
	INT8U * pData, 
	INT32U aSize 
) 
{ 
	INT32U i; 
	INT32U nAccum = 0; 

	BuildTable32(cnCRC_32); 
	for (i = 0; i < aSize; i) 
	{
		nAccum = (nAccum << 8) ^ 
				 Table_CRC[(nAccum >> 24) ^ * pData]; 
	}
	return nAccum; 
} // End of CRC_32 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文在线免费一区三区高中清不卡| 一区二区国产视频| 国产精品人人做人人爽人人添| 国产欧美日韩三级| 中文字幕欧美日韩一区| 国产精品高潮久久久久无| 亚洲精品久久久蜜桃| 日韩精品成人一区二区在线| 奇米影视7777精品一区二区| 国产一区激情在线| 91激情五月电影| 精品久久久久久久久久久久久久久久久 | 午夜精品久久一牛影视| 亚洲综合另类小说| 久久97超碰国产精品超碰| 国产成人高清视频| 欧美二区三区91| 国产精品天天看| 奇米一区二区三区| 色婷婷久久一区二区三区麻豆| 欧美一区二区三区系列电影| 国产日韩精品一区二区三区在线| 亚洲免费在线视频| 久久狠狠亚洲综合| 欧美视频你懂的| 成人欧美一区二区三区黑人麻豆| 蜜桃视频一区二区三区在线观看| 99久久精品久久久久久清纯| 日韩欧美中文字幕公布| 亚洲天堂av一区| 成人在线综合网| 久久先锋影音av鲁色资源| 舔着乳尖日韩一区| 欧美影片第一页| 一区二区欧美视频| 色综合一区二区三区| 国产精品欧美综合在线| 国产久卡久卡久卡久卡视频精品| 日韩一区二区三区电影在线观看| 亚洲与欧洲av电影| 欧美日韩日日骚| 五月综合激情日本mⅴ| 欧美午夜电影在线播放| 亚洲美女淫视频| 色狠狠一区二区| 亚洲午夜三级在线| 欧美肥大bbwbbw高潮| 日韩av在线播放中文字幕| 一区二区在线观看视频| 成人短视频下载| 伊人夜夜躁av伊人久久| 欧美午夜一区二区三区| 日韩精品视频网| 精品国产成人在线影院| 国产精品一级片在线观看| 国产丝袜在线精品| 色综合天天性综合| 亚洲高清免费观看| 久久免费的精品国产v∧| 国产不卡视频在线播放| 亚洲色欲色欲www在线观看| 在线免费亚洲电影| 韩国三级中文字幕hd久久精品| 久久综合网色—综合色88| 成人午夜视频在线观看| 亚洲一区中文在线| 久久理论电影网| 欧美在线视频不卡| 国产一区二区精品久久| 亚洲在线免费播放| 国产喂奶挤奶一区二区三区 | 欧美日韩久久不卡| 经典一区二区三区| 午夜精品久久久久| 国产精品不卡一区| 精品免费日韩av| 欧美午夜精品一区二区蜜桃| 国产成人一级电影| 免费高清不卡av| 亚洲午夜免费福利视频| 日韩理论片网站| 欧美激情在线免费观看| 日韩免费成人网| 欧美羞羞免费网站| 91视频91自| 91亚洲精品乱码久久久久久蜜桃| 日本不卡在线视频| 亚洲超碰97人人做人人爱| 亚洲视频综合在线| 麻豆精品在线播放| 日韩国产一区二| 日韩精品每日更新| 日韩国产欧美在线播放| 日韩中文字幕亚洲一区二区va在线 | 久久综合久久鬼色中文字| 在线成人免费观看| 制服丝袜国产精品| 日韩视频一区二区在线观看| 精品视频在线视频| 欧美一级视频精品观看| 欧美一区二视频| 91精品国产一区二区| 欧美成人精品二区三区99精品| 欧美一区二区三区色| 欧美一二三四在线| 精品国产三级a在线观看| 久久伊99综合婷婷久久伊| 精品欧美黑人一区二区三区| 久久久久99精品一区| 中文av一区特黄| 亚洲欧美综合色| 午夜影院在线观看欧美| 精品在线免费视频| www.欧美日韩国产在线| 在线观看日韩一区| 日韩一区二区麻豆国产| 久久综合国产精品| 亚洲免费伊人电影| 国产永久精品大片wwwapp| av中文字幕亚洲| 日韩一区二区电影网| 国产午夜亚洲精品羞羞网站| 亚洲裸体xxx| 狠狠色综合日日| 欧美主播一区二区三区| 日韩女优av电影在线观看| 中文字幕在线观看不卡| 91麻豆精品秘密| www激情久久| 亚洲午夜三级在线| 成人在线综合网| 26uuu欧美| 性做久久久久久久久| 色综合久久久网| 国产午夜精品久久| 九色综合狠狠综合久久| 在线看不卡av| 最好看的中文字幕久久| 国产精品123区| 欧美大片在线观看| 青青草97国产精品免费观看 | 精品一区二区三区免费播放| 色天使色偷偷av一区二区| 欧美激情一区二区三区全黄 | 色综合久久久久网| 欧美韩日一区二区三区| 国产一区在线观看麻豆| 日韩精品中午字幕| 日韩不卡一区二区三区| 777久久久精品| 午夜精品影院在线观看| 欧美日韩成人激情| 一区二区三区国产精华| 日本韩国欧美一区二区三区| 中文字幕一区免费在线观看 | 日韩免费高清av| 久久精品72免费观看| 精品成a人在线观看| 国产精品12区| 亚洲色图视频网| 91黄色激情网站| 日韩电影免费在线| 久久综合成人精品亚洲另类欧美 | 欧美三级电影网| 欧美国产日韩精品免费观看| 成人黄页在线观看| 欧美老女人第四色| 亚洲高清不卡在线| 国产激情偷乱视频一区二区三区 | 日韩毛片高清在线播放| 美女视频一区在线观看| 久久久久久久久蜜桃| 91色porny| 免费人成在线不卡| 欧美国产97人人爽人人喊| 色视频成人在线观看免| 毛片不卡一区二区| 中文字幕一区二区三中文字幕| 日本道色综合久久| 久久99久久久欧美国产| 亚洲国产高清aⅴ视频| 国产一区二区在线观看视频| 亚洲国产精品t66y| 欧美伊人久久大香线蕉综合69| 蜜臀a∨国产成人精品| 中文字幕日本乱码精品影院| 欧美一区二区三区在| 成人免费毛片app| 亚洲第一久久影院| 中文字幕在线不卡| 日韩欧美国产高清| 欧美亚洲禁片免费| 99久久免费国产| 国产精品一区2区| 免费高清成人在线| 视频一区免费在线观看| 亚洲欧洲韩国日本视频| 国产精品久久久久天堂| 久久久九九九九| 日韩精品中文字幕一区二区三区|