這對你有用嗎?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
提交
取消