|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
||||||
Как преобразовать в строку 16-байтный массив? (python 3)24.04.2023, 23:53. Показов 1322. Ответов 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
Расшифровываем байтный массив Как строку преобразовать в массив посимвольно? Как преобразовать массив байтов в строку
Как преобразовать строку в массив инт? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|