Luajit эквивалентно для string.pack и string.unpack? - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно сохранить список lua ​​float nubers в байтовой форме и прикрепить его к строке.Я знаю, что string.pack существует для Lua 5.3, но я ограничен Luajit.Я не слишком знаком с FFI, и я был бы признателен за помощь в его использовании, если у него есть решение (использование tostring (число) просто использует слишком много байтов для чисел, а память ограничена)

По сути, янужен способ получить упакованную в двоичную строку форму списка чисел (пока что с плавающей запятой), используя Luajit, и иметь возможность хранить ее в строке, соединять эту строку с другой строкой и даже записывать вещи после нее (у меня возникли проблемыс этим в 5.3, так что не уверен, возможно ли это в любом решении, которое вы мне предложите ниже)

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

Я не могу использовать lua 5.3 в качестве альтернативы, в основном из-за производительности.Luajit намного быстрее и лучше подходит для приложения, для которого я его использую ( нейронные сети для тренировки кашля )

И, конечно, когда мне нужен string.pack, мне нужен string.unpack.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Как упаковать массив чисел в двоичную строку:

-- convert t to str
local t = {1/3, 1/7, 3/5}  -- array of floating point numbers
local str = ffi.string(ffi.new("float[?]", #t, t), 4 * #t)

Как распаковать двоичную строку в массив чисел:

-- convert str to t
local ptr = ffi.cast("float*", ffi.new("char[?]", #str, str))
local t = {}
for _ = 1, #str / 4 do
   t[#t + 1] = ptr[#t]
end

Для 8-байтовых двойных чисел заменить float с double и 4 с 8

0 голосов
/ 12 июня 2018

Вы можете проверить, если lua-pack или lua-struct уже делает то, что вам нужно.

...