我使用python 2.7從文件讀取Python中的十六進制字符串不再解釋爲十六進制
我有一個包含十六進制字符串的文件:
\x01\x02\x93AAA
\x02\x02\x93AAA
\x03\x02\x93AAA
....
它們是不可打印字符的混合,代表作爲十六進制,以ASCII格式表示的可打印字符。
我正在根據它們的行號將它們讀入地圖。然後嘗試通過套接字發送它。當我從地圖發送而不是直線字符串時,我收到了不一致的結果。
示例代碼:
print mymap[0]
mysocket.sendall(mymap[0])
mysocket.sendall("\x01\x02\x93AAA")
有了這兩個發送嘗試,在Wireshark的,我可以從MyMap中發送時在ASCII被髮送看到的第一個。正如它發送'\','x','0','1'而不是將其解釋爲十六進制0x01。第二行作爲十六進制數據正確發送。
print mymap [0]打印完全相同的字符串(「\ x01 \ x02 \ x93AAA」),那麼爲什麼一個人將它作爲ASCII發送,另一個發送爲十六進制?
我希望它發送爲十六進制,但是當使用我的地圖它不斷髮送它爲ASCII,但只是硬編碼一個字符串發送爲十六進制。幫幫我?
編輯:我更新了這個問題的標題,以反映實際存在的根本問題。對於那些後來發生的事情。我最初的想法是讀取地圖中的數據,實際上問題是從文件中讀取數據。
丹尼爾,你是我的英雄。我已經花了很多時間在我的頭上靠在牆上。這很有效 –
Nitpicking:這會不會失敗,像'\\ x40'這樣的合法輸入應該是一個反斜槓,然後是'x40 ',而是被解釋爲'\ @'(將'\ x40'改爲'@')?我認爲小心使用['ast.literal_eval'](https://docs.python.org/3/library/ast.html#ast.literal_eval)會更安全。也許像'fmt,repl =('「」「{}」「」','''),如果text.endswith(「'」)else(「'''{}'''」,「'」) '''return ast.literal_eval(fmt.format(text.replace(repl,'\\'+ repl)))'(replace'轉義引號字符,格式包裝爲字符串,然後讓Python過度)。 – ShadowRanger