易语言CRC16校验

.版本 2

.子程序 CRC16_MODBUS, 整数型, , CRC16_MODBUS查表算法
.参数 欲校验的整数, 字节集
.局部变量 crc, 整数型
.局部变量 table, 整数型, , "256"
.局部变量 i, 整数型

' Name:    CRC-16/MODBUS  X16+X15+X2+1
' Poly:    0x8005
' lnit:    0xFFFF
' Refin:   Ture
' Refout:  Ture
' Xorout:  0x0000
' Note:
' —————————————————输入、输出反转、结果不异或————————————————————
.变量循环首 (0, 255, 1, i)
    crc = i
    .变量循环首 (1, 8, 1, )
        .如果 (位与 (crc, 1) ≠ 0)
            crc = 位异或 (右移 (crc, 1), 40961)  ' // 多项式 “0xA001”= Reverse “0x8005”
        .否则
            crc = 右移 (crc, 1)
        .如果结束

    .变量循环尾 ()
    table [i + 1] = crc
.变量循环尾 ()
crc = 65535  ' // 初始值“0xFFFF”)
.变量循环首 (1, 取字节集长度 (欲校验的整数), 1, i)
    crc = 位异或 (右移 (crc, 8), table [位异或 (欲校验的整数 [i], 位与 (crc, 255)) + 1])
.变量循环尾 ()
返回 (crc)
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章