2015-12-21 44 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

相关问题