从一长串小端十六进制值打印十进制值
Print Decimal value from long string of little endian hex values
我正在尝试从一长串十六进制值中读取几行十六进制值,然后将它们转换为小字节序,然后再将其转换为十进制。
这是我正在尝试做的一个例子:
从第 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 是否内置了可以帮助我进行转换的库?或者使用字符串修饰符?
要将表示十六进制字节的字符串从大端转换为小端,您可以执行以下操作:
hex_string = hex(struct.unpack('<I', struct.pack('>I', int(val, 16)))[0])
其中 val 是您的字符串(此处:9a04
)。返回值将是一个十六进制字符串。您可以将其转换为:
hex_string = hex_string[2:].zfill(8)[:4]
我正在尝试从一长串十六进制值中读取几行十六进制值,然后将它们转换为小字节序,然后再将其转换为十进制。
这是我正在尝试做的一个例子:
从第 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 是否内置了可以帮助我进行转换的库?或者使用字符串修饰符?
要将表示十六进制字节的字符串从大端转换为小端,您可以执行以下操作:
hex_string = hex(struct.unpack('<I', struct.pack('>I', int(val, 16)))[0])
其中 val 是您的字符串(此处:9a04
)。返回值将是一个十六进制字符串。您可以将其转换为:
hex_string = hex_string[2:].zfill(8)[:4]