Arrays 是否可以覆盖bytearray值?
我只是在python中迈出了第一步,这是我有史以来的第一个stackoverflow问题:) 我一直在尝试将十六进制数字符串转换为bytearray,对每个字节进行异或运算,然后再转换回十六进制字符串。xor工作正常,但当我将其转换回字符串时,它会返回到以前的值。 我做错了什么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:
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