2015-12-21 2 views
0

Я пытаюсь прочитать несколько строк шестнадцатеричных значений из длинной строки шестнадцатеричных значений, а затем преобразовать их в маленький конец и затем преобразовать их в десятичные.Печать Десятичное значение из длинной строки маленьких значений конца столбца

Вот пример того, что я пытаюсь сделать:

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]) 

Допустима ваша строка (здесь: 9a04). Возвращаемое значение будет шестнадцатеричной. Вы можете преобразовать его:

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

Это похоже на работу, однако при использовании '9a04' это мой результат: 'шестигранный (struct.unpack (' I' INT ('9a04', 16))) [0]) '=' 0x49a0000', а не '049a' – JeanP

+0

ну ... да ... возвращаемое число все еще в шестнадцатеричном формате. Вы можете попробовать: hex (struct.unpack (' I', int ('ff', 16))) [0]) [2:]. Zfill (8) [: 4 ] – ohe

+0

@JeanP, решение отредактировано – ohe

Смежные вопросы