|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
||||||
Как преобразовать в строку 16-байтный массив? (python 3)24.04.2023, 23:53. Показов 1325. Ответов 7
Метки нет (Все метки)
Всех приветствую. Есть cшная библиотека instead. Если афтор игры решит,lua файлы шифруются. Я решил написать дишифратор на python,основываясь на исходниках библиотеки,но в результате я могу получить байты больше чем 255,из-за чего возникает ошибка. Открываю файл как rb,т.к так реализовано в исходниках библиотеки. Затем вызываю функцию list,чтобы сложить туда байты. Проблема возникает не при чтении файла,а при работе алгоритма,т.е python не умеет работать с байтами больше 255. Подскажите пожалуйста,как их правильно приобразовать в строку. На всякий случай отправляю алгоритм,хотя для данного вопроса он не важен и я не прошу помочь исправить ошибки в нём. Я лишь прошу помочь мне сконвертировать в строку байты больше 255. Заранее всем огромное спасибо за помощь.
0
|
||||||
| 24.04.2023, 23:53 | |
|
Ответы с готовыми решениями:
7
Как преобразовать строку в массив
|
|
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
|
|
| 25.04.2023, 00:43 | |
|
0
|
|
|
29 / 19 / 10
Регистрация: 24.04.2023
Сообщений: 62
|
||||||
| 25.04.2023, 01:32 | ||||||
|
Для преобразования массива байт в строку в Python 3 можно воспользоваться методом bytes.decode(). Например, если у вас есть массив байт byte_arr, вы можете преобразовать его в строку следующим образом:
В данном примере мы используем кодировку UTF-8 для преобразования массива байт в строку. Если вам нужна другая кодировка, замените 'utf-8' на соответствующее имя. Обратите внимание, что некоторые значения в массиве байт могут не соответствовать символам ASCII или выбранной вами кодировке, поэтому результат преобразования может содержать некорректные символы или вызывать ошибки.
0
|
||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 25.04.2023, 16:55 [ТС] | |
|
Ну за основу я брал код из https://github.com/instead-hub... ead.c#L617. Файл,который я хочу расшифровать,во вложении (нужно изменить расширение на .lua,хотя это,на мой взгляд,необязательно). И вот при побитовой работе с байтами они выходят за приделы 255.
0
|
|
|
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
|
||||||
| 26.04.2023, 13:11 | ||||||
|
В вашем коде не видно как Вы работаете с считаными данными из файла, так что на всякий случай момент 1:
При четнии из файла в бинарном режиме, возвращается набор байтов типа bytes, bytes не изменяемый тип, т.е. читать отдельные байты можно, перезаписывать нет. После чтения, bytes нужно преобразовать в bytesarray. Момент 2: bytes и bytesarray в качестве отдельных элементов возвращает int В оригинале используется unsigned char, беззнаковый тип, по умолчанию размером 8 бит. 1 проблема в беззнаковости и битовом сдвиге вправо, в питоне нет беззнаковых типов как таковых, а у сдвига вправо есть две версии - логический и арифметический https://ru.wikipedia.org/wiki/... 0%B8%D0%B3. Но так как у нас байт расширяется до int и при этом диапазон возможных значений 0-255, первую проблему можно отбросить. 2 проблема в разнице размеров char/int и сдвиге влево, при сдвиге влево сдвигаемый старший бит отбрасывается, а так как инт больше чара, то 7 бит будет сдвигаться дальше, а не отбрасываться как в чаре. Здесь при сдвиге влево потребуется старшие биты принудительно обнулять после сдвига.
0
|
||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 26.04.2023, 19:18 [ТС] | |
|
Огромное Вам спасибо. Расшифровщик прекрасно работает. Не могли бы Вы пожалуйста по подробнее объяснить отличие работы с битами в c и python. Когда Вы писали,что int > char,Вы имели ввиду int в python? Почему проблемы возникают с седьмым (и,как я понимаю,более высшими битами) и почему нам нужно использовать побитовое и,я имею ввиду &255. Где можно подробнее прочитать про отличие работы с типами и,возможно,с битами,в c и python,чтобы я в дальнейшем,переписывая что-либо с c/c++ на python,не удивлялся,почему мой код не работает как следует. Ещё раз огромное Вам спасибо. Теперь всё прекрасно работает. Храни Вас Бог.
1
|
|
| 02.05.2023, 12:15 | |
|
Не по теме: kazak, зачем костылять, struct или ctypes в помощь.
0
|
|
|
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
|
|||
| 09.05.2023, 15:05 | |||
|
0
|
|||
| 09.05.2023, 15:05 | |
|
Помогаю со студенческими работами здесь
8
Расшифровываем байтный массив Как строку преобразовать в массив посимвольно? Как преобразовать массив байтов в строку
Как преобразовать строку в массив инт? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|