来自十六进制字符串的 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;
}