Luajit等效于string.pack和string.unpack?

时间:2018-06-11 22:58:38

标签: string lua ffi luajit

我需要以字节形式保存lua float nubers列表并将其附加到字符串。我知道在Lua 5.3中存在string.pack但我只限于Luajit。我对FFI不太熟悉,如果它有解决方案,我会很感激使用它的帮助(使用tostring(数字)只使用太多的字节数字和内存是有限的)

基本上,我需要一种方法来获取二进制字符串打包形式的数字列表(现在浮动),使用Luajit,并能够将其存储在字符串和放大器中。将字符串连接到另一个字符串甚至在它之后写东西(我在5.3中遇到了这个问题,所以不确定它是否可能在你建议我使用的任何解决方案中)

另外,如果正确完成,是否可以在获取的字符串上使用正则表达式?这对我来说非常方便。

我不能使用lua 5.3作为替代,主要是因为性能。 Luajit更快,更适合我正在使用的应用程序(咳嗽训练神经网络

当然,当我需要string.pack时,我需要string.unpack。

2 个答案:

答案 0 :(得分:2)

如何将数组包装成二进制字符串:

-- 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

答案 1 :(得分:0)

您可能想要检查lua-packlua-struct是否已经满足您的需求。