我需要以字节形式保存lua float nubers列表并将其附加到字符串。我知道在Lua 5.3中存在string.pack但我只限于Luajit。我对FFI不太熟悉,如果它有解决方案,我会很感激使用它的帮助(使用tostring(数字)只使用太多的字节数字和内存是有限的)
基本上,我需要一种方法来获取二进制字符串打包形式的数字列表(现在浮动),使用Luajit,并能够将其存储在字符串和放大器中。将字符串连接到另一个字符串甚至在它之后写东西(我在5.3中遇到了这个问题,所以不确定它是否可能在你建议我使用的任何解决方案中)
另外,如果正确完成,是否可以在获取的字符串上使用正则表达式?这对我来说非常方便。
我不能使用lua 5.3作为替代,主要是因为性能。 Luajit更快,更适合我正在使用的应用程序(咳嗽训练神经网络)
当然,当我需要string.pack时,我需要string.unpack。
答案 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-pack或lua-struct是否已经满足您的需求。