Luajit中的string.pack和string.unpack的等价物?

我需要将一个Lua浮点数列表以字节形式保存并附加到字符串中。我知道Lua 5.3中存在string.pack,但我受制于Luajit。我不太熟悉FFI,如果有解决方案,我会感激使用它的帮助(使用tostring(number)只是使用太多字节的数字,而且内存受限)

基本上,我需要一种使用Luajit获取数字列表(暂时仅限于浮点数)的二进制字符串打包形式并能够将其存储在字符串中并连接到另一个字符串甚至在其后写入其他内容的方法(我在5.3中遇到过问题,所以不确定在您建议的任何解决方案中是否可能)

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

我不能将Lua 5.3作为替代方案主要是因为性能的原因。 Luajit更快,更适合我正在使用它的应用程序(_咳咳培训神经网络_)

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

原文链接 https://stackoverflow.com/questions/50807140

点赞
stackoverflow用户1442917
stackoverflow用户1442917

你可能想要检查一下 lua-pack 或者 lua-struct 是否已经满足了你的需求。

2018-06-11 23:42:18
stackoverflow用户1847592
stackoverflow用户1847592

如何将数字数组打包到二进制字符串中:

-- 将 t 转为字符串
local t = {1/3, 1/7, 3/5}  -- 浮点数数组
local str = ffi.string(ffi.new("float[?]", #t, t), 4 * #t)

如何将二进制字符串解包为数字数组:

-- 将字符串 str 转为 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字节的double,将float替换为double,将4替换为8

2018-06-12 10:08:25