Перейти к содержимому
  • 0
Natt

Считывание блока файла в массив побитово

Вопрос

Подскажите пожалуйста, как побитово или побайтово считать блок бинарного файла и записать результат в массив

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Необходимо именно в массив?

Можно считать всё в строку и работать с ней как с массивом байт.

local file = io.open("file.name", "rb")
local content = file:read("*a")
file:close()

Весь файл будет прочитан и сохранен в переменной content.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 27.09.2019 в 16:28, Totoro сказал:

Необходимо именно в массив?

Можно считать всё в строку и работать с ней как с массивом байт.


local file = io.open("file.name", "rb")
local content = file:read("*a")
file:close()

Весь файл будет прочитан и сохранен в переменной content.

Каким образом можно работать со строкой как с массивом байт?
Её же нельзя проиндексировать.
В голову приходит только создание массива символов этой строки с помощью цикла for и паттернов.

Изменено пользователем kaka888

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 минут назад, kaka888 сказал:

Каким образом можно работать со строкой как с массивом байт?
Её же нельзя проиндексировать.
В голову приходит только создание массива символов этой строки с помощью цикла for и паттернов.

Проиндексировать можно. Читать данные массива можно так:

content.byte(i,j)

С записью тоже можно что-нибудь придумать, но универсального решения не существует, т.к. Lua не позволяет модифицировать строки, а пересоздание длинных строк весьма накладно. Оптимальное же решение придётся искать под конкретную задачу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
32 минуты назад, eu_tomat сказал:

Проиндексировать можно. Читать данные массива можно так:


content.byte(i,j)

С записью тоже можно что-нибудь придумать, но универсального решения не существует, т.к. Lua не позволяет модифицировать строки, а пересоздание длинных строк весьма накладно. Оптимальное же решение придётся искать под конкретную задачу.

Спасибо, понял.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 27.09.2019 в 16:28, Totoro сказал:

Необходимо именно в массив?

Можно считать всё в строку и работать с ней как с массивом байт.


local file = io.open("file.name", "rb")
local content = file:read("*a")
file:close()

Весь файл будет прочитан и сохранен в переменной content.

Метод простой и эффективный, но проблема заключается в том что, количество озу может быть меньше размера файла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
34 минуты назад, NEO сказал:

проблема заключается в том что, количество озу может быть меньше размера файла.

Это поправимо:

file:seek( "set", blkSize*blkNum )
blkData = file:read( blkSize )
if blkData then
  array = blkData:byte( 1, blkSize )
end

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...