Вот обобщенный подход, который обрабатывает шестнадцатеричную строку с подстрокой переменной длины, например:
s = '5b1\n5\n3ad44'
Следующий код преобразует строку с 3 миллионами шестнадцатеричных подстрок переменной длины в массив целых чисел за 2 секунды (на MacBook) через векторизацию:
import numpy as np, pandas as pd, cStringIO
s = ('5b1\n5\n3ad44\n' * 1000000)[:-1] # 3m item hex string (variable element length)
# change hex to 2 digit decimal
for i in range(0,9): s = s.replace(str(i),'0' + str(i))
for i in [['a','10'],['b','11'],['c','12'],['d','13'],['e','14'],['f','15']]:
s = s.replace(i[0],i[1])
# read string into numpy
n = np.array(pd.read_csv(cStringIO.StringIO(s), header=None)[[0]]).astype('int64')
# fix base
n = (n % 100) + 16 * ((n % 10000)/100) + 256 * ((n % 1000000)/10000) + 4096 * ((n % 100000000)/1000000) + 65536 * ((n % 10000000000)/100000000)
n[0:3] # confirm correct transformation to [1457, 5, 240964]