Natt 0 Опубликовано: 27 сентября, 2019 Подскажите пожалуйста, как побитово или побайтово считать блок бинарного файла и записать результат в массив Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 27 сентября, 2019 Необходимо именно в массив? Можно считать всё в строку и работать с ней как с массивом байт. local file = io.open("file.name", "rb") local content = file:read("*a") file:close() Весь файл будет прочитан и сохранен в переменной content. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kaka888 10 Опубликовано: 24 декабря, 2020 (изменено) В 27.09.2019 в 16:28, Totoro сказал: Необходимо именно в массив? Можно считать всё в строку и работать с ней как с массивом байт. local file = io.open("file.name", "rb") local content = file:read("*a") file:close() Весь файл будет прочитан и сохранен в переменной content. Каким образом можно работать со строкой как с массивом байт? Её же нельзя проиндексировать. В голову приходит только создание массива символов этой строки с помощью цикла for и паттернов. Изменено 24 декабря, 2020 пользователем kaka888 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 24 декабря, 2020 10 минут назад, kaka888 сказал: Каким образом можно работать со строкой как с массивом байт? Её же нельзя проиндексировать. В голову приходит только создание массива символов этой строки с помощью цикла for и паттернов. Проиндексировать можно. Читать данные массива можно так: content.byte(i,j) С записью тоже можно что-нибудь придумать, но универсального решения не существует, т.к. Lua не позволяет модифицировать строки, а пересоздание длинных строк весьма накладно. Оптимальное же решение придётся искать под конкретную задачу. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kaka888 10 Опубликовано: 24 декабря, 2020 32 минуты назад, eu_tomat сказал: Проиндексировать можно. Читать данные массива можно так: content.byte(i,j) С записью тоже можно что-нибудь придумать, но универсального решения не существует, т.к. Lua не позволяет модифицировать строки, а пересоздание длинных строк весьма накладно. Оптимальное же решение придётся искать под конкретную задачу. Спасибо, понял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 25 декабря, 2020 В 27.09.2019 в 16:28, Totoro сказал: Необходимо именно в массив? Можно считать всё в строку и работать с ней как с массивом байт. local file = io.open("file.name", "rb") local content = file:read("*a") file:close() Весь файл будет прочитан и сохранен в переменной content. Метод простой и эффективный, но проблема заключается в том что, количество озу может быть меньше размера файла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 25 декабря, 2020 34 минуты назад, NEO сказал: проблема заключается в том что, количество озу может быть меньше размера файла. Это поправимо: file:seek( "set", blkSize*blkNum ) blkData = file:read( blkSize ) if blkData then array = blkData:byte( 1, blkSize ) end 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Подскажите пожалуйста, как побитово или побайтово считать блок бинарного файла и записать результат в массив
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах