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

北向。 · November 06, 2019 · Last by 北向。 replied at November 07, 2019 · 2074 hits

比如数据串:
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 条回复 时间 点赞
1Floor has deleted
# 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}',这个是怎么来的?

北向。 关闭了讨论 12 Nov 10:15
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up