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

Python 2.7中实现C风格字节数组XOR异或操作求助

实现C风格字节数组的XOR异或操作(基于cycle()避免长度计算)

你已经用cycle()搞定了字符串的XOR异或,现在要处理C风格字节数组?没问题,咱们直接调整下函数就能适配~

先回顾下你原来的字符串异或函数:

from itertools import cycle, izip
def xor(message, key):
    toret = ''
    for c, k in izip(message, cycle(key)):
        toret += chr(ord(c) ^ ord(k))
    return toret
print(xor("test", "234556346"))

对于C风格字节数组(在Python里对应bytes或bytearray类型,每个元素是0-255的字节数值),我们不需要ord()和chr()的转换,直接对字节数值做异或即可,同时返回字节类型的结果。修改后的函数如下:

from itertools import cycle, izip

def xor_bytes(message_bytes, key_bytes):
    # 直接对字节数值异或,返回bytearray(也可转成bytes)
    return bytearray(c ^ k for c, k in izip(message_bytes, cycle(key_bytes)))

# 测试示例:用字节串模拟C风格字节数组
result = xor_bytes(b'test', b'234556346')
print(result)  # 输出字节数组对象
# 若需转成不可变字节串,直接用bytes(result)
print(bytes(result))

关键差异说明:

  • 输入类型:message_bytes和key_bytes需为bytes或bytearray类型(比如用b''创建字节串)
  • 异或逻辑:直接取字节的数值做^运算,省去字符串的编码转换步骤
  • 返回结果:用bytearray生成可修改的字节数组,也能通过bytes()转成不可变字节串适配不同场景

如果你的输入是从C语言环境读取的unsigned char数组,在Python中通常会自动解析为bytes类型,直接传入这个函数就行——和字符串版本一样,cycle(key_bytes)会自动循环密钥,完全不用管两者的长度是否匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:08:31