Lua: читать шестнадцатеричные значения из двоичного - PullRequest
1 голос
/ 23 января 2012

Я пытаюсь прочитать шестнадцатеричные значения из двоичного файла.У меня нет проблем с извлечением строки и преобразованием букв в шестнадцатеричные значения, но как я могу это сделать с управляющими символами и другими непечатными символами?Есть ли способ чтения строки непосредственно в шестнадцатеричные значения без необходимости ее преобразования?

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Из вашего вопроса не ясно, что именно вы хотите сделать, поэтому я дам 2 подхода.

Либо у вас есть файл, заполненный шестнадцатеричными значениями, и прочитайте его так:

s='ABCDEF1234567890'
t={}
for val in s:lower():gmatch'(%x%x)' do
    -- do whatever you want with the data
    t[#t+1]=s:char(val)
end

Или у вас есть двоичный файл, и вы конвертируете его в шестнадцатеричные значения:

s='kl978331asdfjhvkasdf'
t={s:byte(1,-1)}
3 голосов
/ 23 января 2012

Посмотрите здесь :

В качестве последнего примера следующая программа создает дамп двоичного файла. Опять же, первый программный аргумент - это имя входного файла; вывод идет на стандартный вывод. Программа читает файл кусками по 10 байт. Для каждого блока он записывает шестнадцатеричное представление каждого байта, а затем записывает блок в виде текста, изменяя управляющие символы на точки.

local f = assert(io.open(arg[1], "rb"))
local block = 10
while true do
  local bytes = f:read(block)
  if not bytes then break end
  for b in string.gfind(bytes, ".") do
    io.write(string.format("%02X ", string.byte(b)))
  end
  io.write(string.rep("   ", block - string.len(bytes) + 1))
  io.write(string.gsub(bytes, "%c", "."), "\n")
end
...