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

如何优雅实现十六进制字节数组元素异或校验并生成新数组

Python中优雅实现bytearray异或校验和并追加到原数组

我正尝试对bytearray中的所有元素进行异或运算,生成十六进制格式的校验和值,最终将结果追加到原数组形成新的bytearray。抱歉,我现在对Python有些生疏了。以下是我的实现代码:

XorMath = bytearray([0x50,0x021,0x45,0x53])

Xor1 = bytearray[0] ^ bytearray[1]
Xor2 = Xor1 ^ bytearray[2]
Xor3 = Xor2 ^ bytearray[3]

checksum = hex(Xor3)
new_array = XorMath.append(checksum)

print(new_array)

请问有没有更优雅的实现方式?

先修正你原代码里的几个问题:

  • 十六进制写法错误:0x021 应改为 0x21,0x前缀后直接跟有效十六进制数字即可
  • 数组元素引用错误:要使用定义的变量名XorMath[0],而非bytearray[0]
  • append方法是原地修改原数组,不会返回新数组,且不能直接追加十六进制字符串,需传入字节对应的整数值

下面是两种更优雅的实现方式:

方式一:循环累加异或

XorMath = bytearray([0x50, 0x21, 0x45, 0x53])
checksum = 0
for b in XorMath:
    checksum ^= b
# 直接将校验和整数追加到数组
XorMath.append(checksum)
print(XorMath)

方式二:用reduce简化代码

借助functools.reduce可以把序列元素依次传入异或操作,代码更简洁:

from functools import reduce
import operator

XorMath = bytearray([0x50, 0x21, 0x45, 0x53])
checksum = reduce(operator.xor, XorMath)
XorMath.append(checksum)
print(XorMath)

补充说明

  • 异或校验和的初始值设为0即可,因为0和任何值异或结果都是该值本身,符合依次异或的逻辑
  • 如果需要将校验和转为十六进制字符串查看,计算后执行hex(checksum)即可,但追加到bytearray时无需转字符串,直接用整数就行
  • bytearray.append()接受0-255范围内的整数,会自动转换为对应的字节存储

内容的提问来源于stack exchange,提问作者Artificial_Spark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:18:28