CRC-16/XMODEM校验算法C/Go实现,针对单片机优化了的

本文提供了一种针对单片机优化的CRC-16/XMODEM校验算法实现,分别用C语言和Go语言给出具体代码。该算法通过查表方式减少内存占用,适用于资源受限的嵌入式系统。

  网站上的算法大都是查512字节表的,对单片机来讲,太浪费空间了。
  根据网上资料,修改并测试通过以下算法:

static const unsigned short crc16tab[] = {
    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
	0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
};

/**
 * CRC-16/XMODEM (C语言)
 */
unsigned short crc16_xmodem(unsigned char *ptr, unsigned int len)
{
	unsigned short crc = 0;
	unsigned char ch = 0;

	while (len-- != 0)
	{
		ch = crc >> 12;
		crc <<= 4;
		crc ^= crc16tab[ch ^ (*ptr / 16)];

		ch = crc >> 12;
		crc <<= 4;
		crc ^= crc16tab[ch ^ (*ptr & 0x0f)];
		ptr++;
	}
	return crc;
}

 以下是Go语言版:

var crc16tab = []uint16{
	0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
	0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
}

/**
 * CRC-16/XMODEM (Go语言)
 */
func crc16_xmodem(buf []byte) uint16 {
    var crc uint16 = 0
	var ch byte = 0

	size
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值