Arrays 是否可以覆盖bytearray值?

Arrays 是否可以覆盖bytearray值?,arrays,python-3.x,Arrays,Python 3.x,我只是在python中迈出了第一步,这是我有史以来的第一个stackoverflow问题:) 我一直在尝试将十六进制数字符串转换为bytearray,对每个字节进行异或运算,然后再转换回十六进制字符串。xor工作正常,但当我将其转换回字符串时,它会返回到以前的值。 我做错了什么 string="4353417B" arr = bytearray.fromhex(string) #convert string into bytearray for i in arr:

我只是在python中迈出了第一步,这是我有史以来的第一个stackoverflow问题:)

我一直在尝试将十六进制数字符串转换为bytearray,对每个字节进行异或运算,然后再转换回十六进制字符串。xor工作正常,但当我将其转换回字符串时,它会返回到以前的值。 我做错了什么

string="4353417B"

arr = bytearray.fromhex(string) #convert string into bytearray

for i in arr:
        i = i^0x43;
        print(hex(i))

xor_string = arr.hex() #convert bytearray back into string
print(xor_string)
输出: 0x0 0x10 0x2 0x38
4353417b

循环中的
i
未绑定到
字节数组
;它是由它构造的,但是修改它不会改变
bytearray
中的值,就像修改作为参数接收的
int
修改调用者的
int
一样

如果要就地修改值,必须在
字节数组中重新指定索引,例如:

for index, value in enumerate(arr):
    arr[index] = value ^ 0x43

为了清晰起见,我将未打包的变量命名为
index
value
,但大多数人倾向于缩写为
I
x
val
(或者为
value
使用一个有用的名称)实代码中。

i
是从数组复制的值,它不引用回数组。因此,这里您将获得
i
,修改它,然后在块结束后丢弃该值

相反,您可以使用下标运算符(
[]
)来引用数组中的元素:

for i in range(len(arr)):
    arr[i] = arr[i] ^0x43
或者,更优雅地说:

for i in range(len(arr)):
    arr[i] ^= 0x43