从长字符串十六进制十六进制值中打印十进制值

时间:2015-12-21 21:13:02

标签: python string encode endianness

我试图从一长串十六进制值中读取几行十六进制值,然后将它们转换为小端,然后将其转换为十进制。

这是我想要做的一个例子:

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 个答案:

答案 0 :(得分:1)

要将表示十六进制咬合的字符串从big-endian转换为little endian,您可以执行以下操作:

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

其中val是你的字符串(这里是:9a04)。返回的值将是十六进制字符串。您可以使用以下内容进行转换:

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