我有一个文件要转换为自定义基础(例如,基础86,自定义字母)
我尝试使用hexlify转换文件然后进入我的自定义基础,但它太慢了... 60 Ko的8秒..
def HexToBase(Hexa, AlphabetList, OccurList, threshold=10):
number = int(Hexa,16) #base 16 vers base 10
alphabet = GetAlphabet(AlphabetList, OccurList, threshold)
#GetAlphabet return a list of all chars that occurs more than threshold times
b_nbr = len(alphabet) #get the base
out = ''
while number > 0:
out = alphabet[(number % b_nbr)] + out
number = number // b_nbr
return out
file = open("File.jpg","rb")
binary_data = file.read()
HexToBase(binascii.hexlify(binary_data),['a','b'],[23,54])
那么,有人能帮我找到合适的解决方案吗?
抱歉我的英语不好我是法国人,谢谢你的帮助!
答案 0 :(得分:1)
首先你可以替换:
Namespace.CompareEntryIDs
人:
int(binascii.hexlify(binary_data), 16) # timeit: 14.349809918712538
其次,你可以使用int.from_bytes(binary_data, byteorder='little') # timeit: 3.3330371951720164
函数来加速循环:
divmod
对于out = ""
while number > 0:
number, m = divmod(number, b_nbr)
out = alphabet[m] + out
# timeit: 3.8345545611298126 vs 7.472579440019706
与divmod
比较和大数字,请参阅Is divmod() faster than using the % and // operators?。
(注意:我希望buildind一个数组,然后用%, //
创建一个字符串比"".join
更快,但CPython 3.6的情况并非如此。)
所有东西放在一起给了我加速因子6。