【问题标题】:Luajit equivalent for string.pack and string.unpack?string.pack 和 string.unpack 的 Luajit 等价物?
【发布时间】:2018-06-12 18:32:22
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: string lua ffi luajit


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多