这对你有用吗?import numpy as np a = np.array([0, 1, 1, 0, 0, 1, 0]) b = np.array([1, 2, 3, 4, 5, 6, 7]) print(np.array([a*b,(1-a)*b]))[[0 2 3 0 0 6 0][1 0 0 4 5 0 7]]我正在开发一个校验和函数,其中 4 个字节被转换为下面列出的十六进制字符串(例如'00ABCDEF'):packet = "004100ff"checksum = 0for el in packet: checksum ^= ord(el)print (hex(checksum))目前,获得正确校验和(0xbe)的唯一方法是手动将字符串重写为 packet = '\x00\x41\x00\xff' ,这无法自动完成。我怎样才能让python解释字符串,就好像每2个字符都是十六进制字节来执行校验和?
2 回答

回首忆惘然
TA贡献1847条经验 获得超11个赞
我怎样才能让python解释字符串,就好像每2个字符都是十六进制字节来执行校验和?
用于bytes.fromhex()将 解释str为一系列十六进制数字:
>>> packet = "004100ff"
>>> bytes.fromhex(packet)
b'\x00A\x00\xff'
还要注意,迭代会给bytes你int,所以不再需要ord():
>>> for el in bytes.fromhex(packet): print(el) # or list(bytes.fromhex(packet))
...
0
65
0
255

米琪卡哇伊
TA贡献1998条经验 获得超6个赞
如果我正确理解你的问题。这应该有效。
packet = "004100ff"
checksum = 0
bytes_string = [packet[i:i+2] for i in range(0, len(packet), 2)]
for byte_string in bytes_string:
checksum ^= int(byte_string, 16)
print(hex(checksum))
添加回答
举报
0/150
提交
取消