来自十六进制字符串的 crc16 XMODEM [Vb.net
crc16 XMODEM from hexstring [Vb.net
我想了解 CRC16 XMODEM 的工作原理并为其编写代码。它将计算 3 到 18 个字节并使用按钮调用,它将采用十六进制值然后以十六进制值显示结果。例如:0x05 0x02 0xAA 0xAA - 根据 http://crccalc.com/ 将是 0x3430 - 这是正确的。但是如何用代码实现这个,有没有人有任何信息?
unsigned crc16xmodem(unsigned crc, unsigned char const *data, size_t len) {
if (data == NULL)
return 0;
while (len--) {
crc ^= (unsigned)(*data++) << 8;
for (unsigned k = 0; k < 8; k++)
crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
}
return crc & 0xffff;
}
我想了解 CRC16 XMODEM 的工作原理并为其编写代码。它将计算 3 到 18 个字节并使用按钮调用,它将采用十六进制值然后以十六进制值显示结果。例如:0x05 0x02 0xAA 0xAA - 根据 http://crccalc.com/ 将是 0x3430 - 这是正确的。但是如何用代码实现这个,有没有人有任何信息?
unsigned crc16xmodem(unsigned crc, unsigned char const *data, size_t len) {
if (data == NULL)
return 0;
while (len--) {
crc ^= (unsigned)(*data++) << 8;
for (unsigned k = 0; k < 8; k++)
crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
}
return crc & 0xffff;
}