2015-12-21 76 views
0

我想從十六進制值的長字符串中讀取幾行十六進制值,然後將它們轉換成小端,然後將其轉換爲十進制。從小字節16進制值的長字符串中打印十進制值

這裏是什麼,我試圖做一個例子:

LittleEndian Example

步驟1至步驟2我的代碼後續的線將執行該步驟:

""" Convert to Hexadecimal """ 
    def dump(s): 
     import types 
     if type(s) == types.StringType: 
      return dumpString(s) 
     elif type(s) == types.UnicodeType: 
      return dumpUnicodeString(s) 

    FILTER = ''.join([(len(repr(chr(x))) == 3) and chr(x) or '.' for x in range(256)]) 

    def dumpString(src, length=16): 
     result = [] 
     for i in xrange(0, len(src), length): 
      chars = src[i:i+length] 
      hex = ' '.join(["%02x" % ord(x) for x in chars]) 
      printable = ''.join(["%s" % ((ord(x) <= 127 and FILTER[ord(x)]) or '.') for x in chars]) 
      result.append(hex) 
     return ''.join(result) 

""" _____________________________________________ """ 

    t = dump(TEST.encode("utf8", "replace")) #TEST is a string of characters 

這或多或少是我第一跳從步驟1到步驟2.現在從步驟2到步驟3我正在嘗試沿着一行:

newString = t[54:59] 

但是我不確定下列方法在使用不同長度的字符串時是否能正常工作。它可能適用於當前字符串。所以,現在我有我想要關注的字節我不確定如何將這些位轉換成小端,以便將其轉換爲十進制。 Python是否內置了可以幫助我轉換的庫?或者使用一個字符串修飾符?

回答

1

要轉換較大端十六進制咬傷小端的字符串,你可以做到以下幾點:

hex_string = hex(struct.unpack('<I', struct.pack('>I', int(val, 16)))[0]) 

其中val是(這裏:9a04)的字符串。返回的值將是一個十六進制字符串。你可以用它轉換:

hex_string = hex_string[2:].zfill(8)[:4] 
+0

這似乎但是工作使用 '9a04' 時,這是我的結果:'十六進制(struct.unpack( '我',INT( '9a04',16)))[0])'='0x49a0000'而不是'049a' – JeanP

+0

呃...是的...返回的數字仍然是十六進制。你可以試試:hex(struct.unpack(' I',int('ff',16)))[0])[2:] .zfill(8)[:4 ] – ohe

+0

@JeanP,解決方案編輯 – ohe

相關問題