CRC16校验算法源码(易语言)

CRC16校验算法源码(易语言)

.版本 2

.子程序 _CRC16校验计算, 文本型

.参数 预校验内容, 字节型, 数组

.局部变量 crc, 字节型, , “2”

.局部变量 返回数据, 整数型

.局部变量 j, 整数型

.局部变量 被校验内容, 字节型

.局部变量 i, 整数型

.局部变量 CY, 整数型

.局部变量 crc高位, 文本型

.局部变量 crc低位, 文本型

crc = { 255, 255 }

.计次循环首 (取数组成员数 (预校验内容), j)

被校验内容 = 预校验内容 [j]

crc [2] = 位异或 (被校验内容, crc [2])

.计次循环首 (8, i)

CY = 位与 (crc [2], 1) 检查CRC[2]与1有没有共同位

.如果 (CY = 1) 如果CRC[2]与1有共同为

crc [2] = 右移 (crc [2], 1) 低位右移一位

.如果真 (位与 (crc [1], 1) = 1) 如果校验高位与1有共同位

crc [2] = 位或 (crc [2], 128) 给crc低位最高位补1

.如果真结束

crc [1] = 右移 (crc [1], 1) crc高位右移一位

crc [2] = 位异或 (crc [2], 1) CRC低位与生成多项式0XA001求异或

crc [1] = 位异或 (crc [1], 160) CRC高位与生成多项式0XA001求异或

.否则

crc [2] = 右移 (crc [2], 1) 低为右移一位

.如果真 (位与 (crc [1], 1) = 1) 如果校验高位与1有共同位

crc [2] = 位或 (crc [2], 128) 给crc低位最高位补1

.如果真结束

crc [1] = 右移 (crc [1], 1) 高位右移1位

.如果结束

.计次循环尾 ()

.计次循环尾 ()

.如果真 (取文本长度 (到文本 (crc [1])) = 1)

crc高位 = “00” + 到文本 (crc [1])

.如果真结束

.如果真 (取文本长度 (到文本 (crc [1])) = 2)

crc高位 = “0” + 到文本 (crc [1])

.如果真结束

.如果真 (取文本长度 (到文本 (crc [1])) = 3)

crc高位 = 到文本 (crc [1])

.如果真结束

.如果真 (取文本长度 (到文本 (crc [2])) = 1)

crc低位 = “00” + 到文本 (crc [2])

.如果真结束

.如果真 (取文本长度 (到文本 (crc [2])) = 2)

crc低位 = “0” + 到文本 (crc [2])

.如果真结束

.如果真 (取文本长度 (到文本 (crc [2])) = 3)

crc低位 = 到文本 (crc [2])

.如果真结束

返回 (crc高位 + crc低位)

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片