Python python 怎么实现数据串进行 BCC 校验 (Block Check Character/ 信息组校验码)?

北向。 · 2019年11月06日 · 最后由 北向。 回复于 2019年11月07日 · 2930 次阅读

比如数据串:
23 23 02 35 35 36 36 37 37 35 35 36 36 37 37 35 35 36 36 37 02 01 00 a1 13 0b 04 0b 1d 20 03 C8 01 00 00 00 00 00 00 35 35 36 36 37 37 35 35 36 36 37 37 35 35 36 36 37 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 00 02 32 00 64 af af 01 90 03 e8 13 88 13 88 7d 03 e8 28 60 28 60 01 f4 5a 7d 01 07 3b 5e 64 01 d4 a9 da 00 00 03 e8 80 01 7d 00 00 00 64 5a 00 00 13 88 00 00 00 32 28 60
怎么将每一个字节的数据(一般是两个 16 进制的字符)进行异或后即得到校验码?
试了前一位和后一位,遍历异或,还是不行?

共收到 3 条回复 时间 点赞
5楼 已删除
# python3.6以上版本

def get_bcc(inputStr: str) -> str:
    bcc = 0
    for i in inputStr.split(' '):
        bcc = bcc ^ int(i, 16)
    return f'{bcc:x}'


def test():
    inputStr = "23 23 02 35 35 36 36 37 37 35 35 36 36 37 37 35 35 36 36 37 02 01 00 a1 13 0b 04 0b 1d 20 03 C8 01 00 00 00 00 00 00 35 35 36 36 37 37 35 35 36 36 37 37 35 35 36 36 37 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 00 02 32 00 64 af af 01 90 03 e8 13 88 13 88 7d 03 e8 28 60 28 60 01 f4 5a 7d 01 07 3b 5e 64 01 d4 a9 da 00 00 03 e8 80 01 7d 00 00 00 64 5a 00 00 13 88 00 00 00 32 28 60"
    assert get_bcc(inputStr) == "43"

非常感谢!可以直接用

大神能不能帮我解释下 f'{bcc:x}',这个是怎么来的?

北向。 关闭了讨论 11月12日 10:15
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册