// 计算给定长度数据的16 位CRC。
U16 GetCrc16(const U8* pData, int nLength)
{
U16 fcs = 0xffff; // 初始化
while(nLength>0){
fcs = (fcs >> 8) ^ crctab16[(fcs ^ *pData) & 0xff];
nLength--;
pData++;
}
return ~fcs; // 取反
}crctab16[]是一个数组,部分数组如下:
static const U16 crctab16[] =
{
0X0000, 0X1189, 0X2312, 0X329B, 0X4624, 0X57AD, 0X6536, 0X74BF,0X8C48, 0X9DC1,
0XAF5A, 0XBED3, 0XCA6C,
0XDBE5, 0XE97E, 0XF8F7,0X1081, 0X0108, 0X3393, 0X221A, 0X56A5, 0X472C, 0X75B7,
0X643E,0X9CC9, 0X8D40,......}
U16 GetCrc16(const U8* pData, int nLength)
{
U16 fcs = 0xffff; // 初始化
while(nLength>0){
fcs = (fcs >> 8) ^ crctab16[(fcs ^ *pData) & 0xff];
nLength--;
pData++;
}
return ~fcs; // 取反
}crctab16[]是一个数组,部分数组如下:
static const U16 crctab16[] =
{
0X0000, 0X1189, 0X2312, 0X329B, 0X4624, 0X57AD, 0X6536, 0X74BF,0X8C48, 0X9DC1,
0XAF5A, 0XBED3, 0XCA6C,
0XDBE5, 0XE97E, 0XF8F7,0X1081, 0X0108, 0X3393, 0X221A, 0X56A5, 0X472C, 0X75B7,
0X643E,0X9CC9, 0X8D40,......}
解决方案 »
- [疑问]有一个String,在循环中需要改变它的值,但是每次循环我都希望使用它的原始值,如何实现?
- java编程思想(第四版)翻译如何,值得买吗?我刚买了核心技术卷I 和卷II
- 如何写大的XML文件,文件大小在300M以上。在PC机上。
- Application访问串口数据,在jb中调式没问题,打包成exe后无法链接串口
- 高手请帮我好吗?
- 网页设计
- 困扰许久的难题!!!!!!!!
- JAVASERVERLET是什么?实现SERVERLET编程需要那些软件?
- 大家来聊聊:JBUILDER5比JUILDER4在那方面改进了!?
- class文件应该放在tomcat3.2的什么目录下呢?
- 为什么这个for循环中不打印字符?
- svn
char GetCrc16(byte[] pData, int nLength)
{
char fcs = 0xffff; // 初始化
int i = 0;
while(nLength>0){
fcs = (fcs >> 8) ^ crctab16[(fcs ^ (char)pData[i]) & (char)0x00ff];
nLength--;
i++;
}
return ~fcs; // 取反
}为何取反,那就看算法的需求