簡體   English   中英

將十六進制字符串轉換為長python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM