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

Python字节数组元素为int时的按位NOT操作疑问

关于Python字节数组与位运算的疑问解答

嘿,这个问题我之前处理二进制数据时也纠结过,来给你讲明白~

首先直接回答你的核心疑问:是的,Python确实会把字节数组(或者bytes对象)里的单个无符号8位数据以整数形式返回。在Python的设计里,字节本身就是用0-255范围内的整数来表示的——这样做其实更方便我们进行位运算、数值计算这类操作,比单独搞一个“字节类型”要灵活得多。

接下来解决你提到的按位取反(~)操作的问题:直接用~处理字节对应的整数时,你会发现结果是负数,比如~1会得到-2。这是因为Python的整数是任意精度的,按位取反会翻转所有二进制位(包括高位),而不是只翻转低8位。要得到我们需要的“8位无符号字节取反”结果,只需要把取反后的数值和0xFF做按位与操作,就能保留低8位的正确值:

举个贴合你音频编解码场景的代码例子:

# 假设这是你的音频字节数组
audio_data = bytearray(b'\x01\x05\x0a')

# 取第一个字节(返回int类型,值为1)
original_byte = audio_data[0]
# 执行按位取反并保留8位无符号结果
inverted_byte = ~original_byte & 0xFF
# 把处理后的字节存回数组
audio_data[0] = inverted_byte

print(audio_data)  # 输出: bytearray(b'\xfe\x05\n'),原0x01变成了0xfe(254)

这样处理后,你就能得到正确的8位比特翻转结果,完全符合你加密逻辑的需求。而且当你把0-255范围内的整数赋值回字节数组时,Python会自动把它转换成对应的无符号8位字节,不需要额外的类型转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:30:02