#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() Не знает, когда заканчивается одно значение и начинается следующее.