You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按位异或后二进制输出格式匹配输入:结果为何是6位而非8位?

解决异或结果缺少前导零的问题

嘿,我明白你的疑惑啦!问题出在整数类型不保留前导零这一点上,咱们一步步拆解:

问题根源

  1. 你把testt("00110000")转成int时,前导零会被自动丢弃,int("00110000")得到的是十进制的48。
  2. checksum转成int是0,异或后结果还是48。
  3. 直接打印这个整数的二进制形式时,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:27:49