小小笨孩 2015-08-14 23:23 采纳率: 0%
浏览 3349

16位的CRC校验 ,把C实现的,用JAVA实现

//本部分的定义需要根据不同的编译器进行修改
//U8 U16 U32分别表示8位、16位、32位无符号数值
#define U8 unsigned char
#define U16 unsigned short
#define U32 unsigned int

#endif

//C文件部分

U16 Crc16CCITT_Table[16]={ /* CRC 16bit余式表 */
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef
};

/****************************************************************************
函数名 : void Crc16CCITT(U8 pDataIn, U32 DataLen, U8 CrcOut[2])
描述 : 用移位的方法计算一组数字的16位CRC-CCITT校验值
输入参数 : 1、U8 *pDataIn : 要进行16位CRC-CCITT计算的数
2U32 DataLen : DataIn数组的长度
输出参数 : 1、U8 CrcOut[2] : 16位CRC-CCITT计算的结果
返回值 : 无
*
**************************************************************************/
void Crc16CCITT(U8 *pDataIn, U32 DataLen, U8 CrcOut[2])
{
U16 Crc = 0;
U8 Temp;

while (DataLen-- != 0)
{
    Temp = ((U8)(Crc>>8))>>4;
    Crc <<= 4;
    Crc ^= Crc16CCITT_Table[Temp^(*pDataIn/16)];
    Temp = ((BYTE)(Crc>>8))>>4;
    Crc <<= 4;
    Crc ^= Crc16CCITT_Table[Temp^(*pDataIn&0x0f)];
    pDataIn++;
}
CrcOut[0] = Crc/256;
CrcOut[1] = Crc%256;

}

  • 写回答

1条回答 默认 最新

  • devmiao 2015-08-14 23:37
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用