Чтение одного байта сразу из файла в python - PullRequest
0 голосов
/ 07 октября 2019

Мне нужно создать массив состояний (всего 4x4 матрицы по 128 бит, каждый элемент по одному байту) для реализации AES в python, как я могу читать по одному байту за раз из входного текстового файла.

1 Ответ

0 голосов
/ 07 октября 2019

Я предполагаю, что вы используете NumPy, поскольку вы упомянули матрицу 4x4.

Предположим, у нас есть text.txt с "this is a TEST ø´®†˙∆\n" в качестве его содержимого. Мы можем использовать тип данных void для работы с необработанными данными.

>>> arr = np.fromfile('text.txt', dtype='|V1')
>>> arr
array([b'\x74', b'\x68', b'\x69', b'\x73', b'\x20', b'\x69', b'\x73',
       b'\x20', b'\x61', b'\x20', b'\x54', b'\x45', b'\x53', b'\x54',
       b'\x20', b'\xC3', b'\xB8', b'\xC2', b'\xB4', b'\xC2', b'\xAE',
       b'\xE2', b'\x80', b'\xA0', b'\xCB', b'\x99', b'\xE2', b'\x88',
       b'\x86', b'\x0A'], dtype='|V1')

Это приводит к тем же данным, что и, хотя ASCII отображается в виде символов.

>>> with open('text.txt', 'rb') as fp:
...     byte = fp.read()
>>> byte
b'this is a TEST \xc3\xb8\xc2\xb4\xc2\xae\xe2\x80\xa0\xcb\x99\xe2\x88\x86\n'
...