Lua: запись шестнадцатеричных значений в двоичный файл
у меня есть несколько шестнадцатеричных значений, которые я пытаюсь записать в файл. Кажется, что Lua не поддерживает это из коробки, так как все они рассматриваются как строки вместо значений. Я решил, что мне придется разбить более длинное шестнадцатеричное значение, например AABBCC на AA, BB, CC и использовать строку.char () на всех их десятичных значениях последовательно, чтобы выполнить работу.
есть ли встроенная функция, которая позволяет мне писать такие значения напрямую, без преобразования их в первую очередь? Я побег символы, такие как "0xAA" и "xAA", но они не сработали.
Edit: позвольте мне привести вам пример. Я смотрю на тестовый файл в hex редакторе:
00000000 00 00 00 00 00 00 ......
и я хочу написать ему следующим образом со строкой "AABBCC":
00000000 AA BB CC 00 00 00 ......
что я получаю, хотя с escape-символами:
00000000 41 41 42 42 43 43 AABBCC
3 ответов
Я использую следующие функции для преобразования между шестнадцатеричной строкой и"raw binary":
function string.fromhex(str)
return (str:gsub('..', function (cc)
return string.char(tonumber(cc, 16))
end))
end
function string.tohex(str)
return (str:gsub('.', function (c)
return string.format('%02X', string.byte(c))
end))
end
их можно использовать следующим образом:
("Hello world!"):tohex() --> 48656C6C6F20776F726C6421
("48656C6C6F20776F726C6421"):fromhex() --> Hello world!
Итак, у вас есть строка:
value = 'AABBCC'
и вы хотите напечатать его (или превратить его в строку), как это?
'101010101011101111001100'
как насчет этого?
function hex2bin(str)
local map = {
['0'] = '0000'
['1'] = '0001'
['2'] = '0010'
-- etc. up to 'F'
}
return str:gsub('[0-9A-F]', map)
end
обратите внимание, что он оставляет нетронутыми любые символы, которые не могут быть интерпретированы как hex.
существует такая функция, потому что ее легко написать.
function writeHex(str,fh)
for byte in str:gmatch'%x%x' do
fh:write(string.char(tonumber(byte,16)))
end
end
Это просто записывает значения в файл, на который указывает файловый дескриптор FН.