按位异或后二进制输出格式匹配输入:结果为何是6位而非8位?
解决异或结果缺少前导零的问题
嘿,我明白你的疑惑啦!问题出在整数类型不保留前导零这一点上,咱们一步步拆解:
问题根源
- 你把
testt("00110000")转成int时,前导零会被自动丢弃,int("00110000")得到的是十进制的48。 checksum转成int是0,异或后结果还是48。- 直接打印这个整数的二进制形式时,Python不会主动补前导零,所以输出的是
110000(6位),而不是你期望的8位。
修复方案
异或完成后,咱们把结果重新格式化为固定8位的二进制字符串,就像你处理testt那样。修改后的代码如下:
a_telegram = "$00;02;A1;00000000;*" checksum = "00000000" testt = "{0:08b}".format(int(hex(ord(a_telegram[2])), 16)) # 异或操作后,格式化回8位二进制字符串 result = int(testt) ^ int(checksum) formatted_result = "{0:08b}".format(result) print(checksum) print(testt) print(formatted_result)
输出结果
运行后你会得到:
00000000 00110000 00110000
这样就完美保留了8位的格式啦!另外,其实你也可以直接对二进制字符串对应的整数操作,不用绕一圈转字符串再转回int——不过当前的修改方式最贴合你原来的代码逻辑,容易理解。
内容的提问来源于stack exchange,提问作者WamboRambo
相关产品推荐
相关产品推荐

