首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Python计算CRC16

用Python计算CRC16
EN

Stack Overflow用户
提问于 2016-02-04 15:59:58
回答 5查看 59.4K关注 0票数 5

我试图基于CRC-16算法评估适当的校验和,使用crcmod Python模块和2.7版本的crcmod解释器。校验和参数是:

  • “儿童权利委员会令”:16
  • CRC多项式: 0x8005
  • 投资价值: 0xFFFF
  • 最终值: 0x0000
  • 直接:真

代码:

代码语言:javascript
运行
复制
crc16 = crcmod.mkCrcFun(0x18005, rev=False, initCrc=0xFFFF, xorOut=0x0000)
print hex(crc16(str(int(0x5A0001))))

对于输入0x5A0001,它打印0x7E16,而我应该得到类似0xCE0A的内容。

我检查了http://www.lokker.net/Java/crc/CRCcalculation2.htm,计算出来的值是0xACE,这是正确的(相对于订单)。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-02-05 15:50:12

crcmod工作很好。你没有给它你认为你要给它的三个字节。您的str(int(0x5A0001))提供了七个字节,它们是ASCII字符5898241 --将0x5a0001转换为十进制。

要将字节0x5a 0x00 0x01提供给它,您可以选择(作为一种方法):

代码语言:javascript
运行
复制
print hex(crc16("5a0001".decode("hex")))

打印0xace

票数 5
EN

Stack Overflow用户

发布于 2019-04-25 13:31:22

以下是CRC-16/CCITT-FALSE的python实现

代码语言:javascript
运行
复制
def crc16(data : bytearray, offset , length):
    if data is None or offset < 0 or offset > len(data)- 1 and offset+length > len(data):
        return 0
    crc = 0xFFFF
    for i in range(0, length):
        crc ^= data[offset + i] << 8
        for j in range(0,8):
            if (crc & 0x8000) > 0:
                crc =(crc << 1) ^ 0x1021
            else:
                crc = crc << 1
    return crc & 0xFFFF
  • 数据:要计算CRC的数据的字节数组。
  • 偏移量:要从中开始计算CRC的偏移量。
  • 长度:要计算CRC的偏移量。
票数 3
EN

Stack Overflow用户

发布于 2020-03-09 15:56:11

基于pycrc代码的CRC-16-ANSI、CRC-16-IBM的单功能工作示例.

修改起来很容易,但不包括输入或输出反射能力:

代码语言:javascript
运行
复制
def crc16(data: bytes):
    xor_in = 0x0000  # initial value
    xor_out = 0x0000  # final XOR value
    poly = 0x8005  # generator polinom (normal form)

    reg = xor_in
    for octet in data:
        # reflect in
        for i in range(8):
            topbit = reg & 0x8000
            if octet & (0x80 >> i):
                topbit ^= 0x8000
            reg <<= 1
            if topbit:
                reg ^= poly
        reg &= 0xFFFF
        # reflect out
    return reg ^ xor_out
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35205702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档