所以我寫了這個小套接字程式來發送一個udp資料包并接收回應
sock.sendto(data, (MCAST_GRP, MCAST_PORT))
msgFromServer = sock.recvfrom(1024)
banner=msgFromServer[0]
print(msgFromServer[0])
#name = msgFromServer[0].decode('ascii', 'ignore')
#print(name)
回應是
b'\xff\xff\xff\xffI\x11server banner\x00map\x00game\x00Counter-Strike: Global Offensive\x00\xda\x02\x00\x10\x00dl\x01\x011.38.2.2\x00\xa1\x87iempty,secure\x00\xda\x02\x00\x00\x00\x00\x00\x00'
現在問題是我想將所有十六進制值轉換為十進制,我嘗試了解碼;但后來我最終失去了所有的十六進制值。
在我的情況下,如何將所有十六進制值轉換為十進制
example: \x13 = 19
編輯:我想迭代我的問題的更好方法是
如何在給定的回應中僅將十六進制值轉換為十進制
uj5u.com熱心網友回復:
這里有兩個問題:
- 處理非 ASCII 位元組
- 處理
\xhhPython 字串中合法字符的序列
我們可以混合使用正則運算式和字串方法來解決這兩個問題。
首先,使用反斜杠替換錯誤處理程式將位元組解碼為 ASCII,以避免丟失非 ASCII 位元組。
>>> import re
>>>
>>> decoded = msgFromServer[0].decode('ascii', errors='backslashreplace')
>>> decoded
'\\xff\\xff\\xff\\xffI\x11server banner\x00map\x00game\x00Counter-Strike: Global Offensive\x00\\xda\x02\x00\x10\x00dl\x01\x011.38.2.2\x00\\xa1\\x87iempty,secure\x00\\xda\x02\x00\x00\x00\x00\x00\x00'
接下來,使用正則運算式將非 ASCII '\\xhh' 序列替換為其數字等價物:
>>> temp = re.sub(r'\\x([a-fA-F0-9]{2})', lambda m: str(int(m.group(1), 16)), decoded)
>>> temp
'255255255255I\x11server banner\x00map\x00game\x00Counter-Strike: Global Offensive\x00218\x02\x00\x10\x00dl\x01\x011.38.2.2\x00161135iempty,secure\x00218\x02\x00\x00\x00\x00\x00\x00'
最后,使用str.translate\xhh將轉義序列映射到它們的十進制值:
>>> tt = str.maketrans({x: str(x) for x in range(32)})
>>> final = temp.translate(tt)
>>> final
'255255255255I17server banner0map0game0Counter-Strike: Global Offensive021820160dl111.38.2.20161135iempty,secure02182000000'
uj5u.com熱心網友回復:
您可以先使用bytes.hex方法將位元組表示形式轉換為十六進制,然后使用int(x, base)將其轉換為具有適當基數的整數
>>> b'\x13'.hex()
'13'
>>> int(b'\x13'.hex(), 16)
19
uj5u.com熱心網友回復:
假設 v 包含回應,您要求的是
[int(i) for i in v]
我懷疑這不是你想要的,這是我從問題中讀到的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/447341.html
