Чтение двоичного файла (ASN1) в python

#python #hex #binaryfiles

#python #hex #двоичные файлы

Вопрос:

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

Вот что я пытаюсь :

 >>> g = open('full_file.dat', 'rb')
>>> g.read(10)
'xb4x82x01x19x80x01x12x83x08B'
>>> g.close()
 

Я также попробовал numpy и создал список, но не смог получить желаемый результат. это результат моего списка.

 >>> import numpy as np
>>> arr = np.fromfile('full_file.dat')
>>> arr_1 = np.fromfile('full_file.dat', dtype='uint8')
>>> arr_2 = np.fromfile('full_file.dat', dtype='uint16')
>>> arr_3 = np.fromfile('full_file.dat', dtype='uint32')
>>> arr_4 = np.fromfile('full_file.dat', dtype='uint64')
>>> arr[0:0 10]
array([-7.04819856e-294,  2.41220765e-196,  1.42312203e-132,
       -7.21283195e 014, -3.91818329e-273,  1.93670867e-296,
        1.55576471e-154,  1.60149121e-137,  7.95805944e-067,
        6.63806646e 246])
>>> arr_1[0:0 10]
array([180, 130,   1,  25, 128,   1,  18, 131,   8,  66], dtype=uint8)
>>> arr_2[0:0 10]
array([33460,  6401,   384, 33554, 16904, 24832,  2064,  5970, 34041,
       21256], dtype=uint16)
>>> arr_3[0:0 10]
array([ 419529396, 2198995328, 1627406856,  391251984, 1393067257,
        613427589, 2769310728, 3271852038, 2250748950, 2271278338],
      dtype=uint32)
>>> arr_4[0:0 10]
array([ 9444613018236322484,  1680414477402522120,  2634651434612196601,
       14052497503330259976,  9755066184073982998,   182770718416065793,
        2306036527631311257,  2560251140755162795,  3617925914634227596,
        8299678268708451374], dtype=uint64)
 

Я новичок в python и использую python 2.7

Я ожидал увидеть, что я могу увидеть, используя этот онлайн-инструмент (файл прилагается), т.Е.

Открытие файла с помощью онлайн-инструмента

Есть ли другой способ сделать это?

Комментарии:

1. Когда вы открываете файл, в rb котором вы читаете его как байты, вы можете преобразовать байты в шестнадцатеричное g.read(10).hex() значение следующим образом: в этот момент 10 прочитанных вами байтов находятся в шестнадцатеричной строке, которую вы должны иметь возможность искать.

2. Привет, Grizzle, спасибо, хорошо, я сделал то, что вы предложили, это работает только для python 3, сказав это, это результат. >>> g = открыть(‘full_file. dat’, ‘rb’) >>> g.прочитайте (10) b’xb4 x82 x01 x19 x80 x01 x12 x83 x08B’ >>> g.закрыть() ——— >>> g = открыто(‘full_file. dat’, ‘rb’) >>> g.read(10).hex() ‘b4820119800112830842’ >>> g.close() Не знает, когда заканчивается одно значение и начинается следующее.