Pyrhon. Поиск и экспорт

Рейтинг: -2Ответов: 1Опубликовано: 20.02.2023

Подскажите пожалуйста, как можно реализовать через скрипт питона:

Нужно написать скрипт, который будет считывать один hex файл и вытаскивать из него в текстовый файл 4 байта после "00 00 00 00". Но эти 4 байта нужно также перевернуть и сконвертировать в decimal.

Например вот кусок из этого файла

07 00 04 01 00 01 03 d2 91 01 00 05 50 00 00 00 00 a3 b8 54 77 d9 70 00 00 ca e9 00 00 ff ff ff ff a3 b8 54 77 91 00 a2 00 01

Скрипт ищет "00 00 00 00", находит, и после них нужно вытащить 4 байта:

a3 b8 54 77

Но их надо перевернуть:

77 54 b8 a3

И преобразовать в dec

Получится: 2002040995

И все полученные числа записать в текстовый файл.

Ответы

▲ 2Принят
input_file_name = 'in.bin'
out_file_name='num.txt'

with open(input_file_name, 'rb') as f:
    s = f.read()

count_of_zeros = 0
count_of_bytes = 0

res=[]                                              #Список для четырех байт
allres=[]                                           #Список для списков из четырех байт

for el in s:
    if count_of_bytes <= 3 and count_of_zeros == 4:  #Пока кол-во байт меньше 4 и найденно 4 нуля подряд
        res.append(el)                               #складываем в список байты
        count_of_bytes+=1                            #считаем до четырех
    else:
        if count_of_bytes==4:                        #Когда собрали 4 байта
            allres.append(res)                       #Забираем и обнуляемся
            res=[]
            count_of_bytes=0
            count_of_zeros=0
        if el == 0:                                  # Считаем нули подряд
            count_of_zeros += 1
        else:
            count_of_zeros = 0


dec_number=0
st_out=''
for al in allres:
    for i,n in enumerate(al):
        dec_number+= n * 256 ** i                   #Подсчитываем десятичное число
    if dec_number!=0:
        st_out+= str(dec_number) + '\n'
    dec_number=0

with open(out_file_name,'w') as out_file:           #Записываем в файл
    out_file.write(st_out)