[英]Convert Hexadecimal string to long python
我想獲取大尾數的99997值是(2642804992),然后將答案作為長值返回
這是我在python中的代碼:
v = 99997
ttm = pack('>i', v) # change the integer to big endian form
print ("%x"), {ttm}
r = long(ttm, 16) # convert to long (ERROR)
return r
輸出: %x set(['\\ x00 \\ x01 \\ x86 \\ x9d'])
錯誤: 基數為16的long()無效文字:'\\ x00 \\ x01 \\ x86 \\ x9d'
由於字符串已經是十六進制形式,為什么不轉換為長字符串呢? 我將如何消除此錯誤,以及解決此問題的方法是什么。
pack將返回您提供的數據的字符串表示形式。
字符串表示形式與長數的以16為底的數字不同。 注意每個數字前的\\ x 。
編輯:
嘗試這個
ttm = pack('>I',v)
final, = unpack('<I',ttm)
print ttm
注意使用I ,因此將數字視為無符號值
您必須使用struct.unpack
作為對struct.pack
的反向操作。
r, = unpack('<i', ttm)
這將r
設置為-1652162304
。
您只是將整數值轉換為大端字節二進制字節。
這對於嵌入發給大端機器(PowerPC,M68K等)的消息很有用。
像這樣轉換為long
意味着將ttm
字符串解析為ASCII,應為0x1869D
。 (並且BTW的打印語句也不起作用)
如果我僅遵循您的問題標題:“將十六進制字符串轉換為long”:
只需使用long("0x1869D",16)
。 無需序列化。 (BTW long
僅在python 2中有效。在python 3中,由於所有數字均以long
格式表示,因此您必須使用int
)
好吧,我正在回答解釋為什么它一定會失敗,但是當我真正知道您想做什么時,我將編輯答案。
這是一個很好的問題。
這是您要找的東西。
s = str(ttm)
for ch in r"\bx'":
s = s.replace(ch, '')
print(int(s, 16))
問題在於ttm
在某些方面類似於字符串。 看起來像這樣: b'\\x00\\x01\\x86\\x9d'
。 將其提供給int
(或long
)可保留所有非十六進制字符。 我刪除了它們,然后它起作用了。
刪除非十六進制字符后,剩下的就是0001869d
,實際上為99997
注釋我在Python 3上嘗試過。但是在Python 2上,它幾乎是相同的,您不會將b
附加到字符串上,但否則是同一回事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.