易語言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)
 

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