Luajit 相当于 string.pack 和 string.unpack?

Yim*_*rdo 2 string lua ffi luajit

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

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

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

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

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

Ego*_*off 6

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

-- 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)
Run Code Online (Sandbox Code Playgroud)

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

-- 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
Run Code Online (Sandbox Code Playgroud)

对于 8 字节双精度数,替换floatdouble48