亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 str 解釋為十六進制字符序列

將 str 解釋為十六進制字符序列

一只斗牛犬 2022-06-14 10:03:38
這對你有用嗎?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


查看完整回答
反對 回復 2022-06-14
?
米琪卡哇伊

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))


查看完整回答
反對 回復 2022-06-14
  • 2 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號