ffi.string的用法
时间: 2023-09-09 09:08:21 浏览: 59
在 Lua 中,ffi.string 函数是用来将一段内存中的原始数据转换成字符串的函数。它的语法格式如下:
```lua
ffi.string(cdata [, len])
```
其中,`cdata` 参数是一个指向内存中原始数据的指针,`len` 参数是可选的,表示要转换的数据长度。如果不指定 `len` 参数,则会将 `cdata` 指向的整个内存块转换成字符串。
例如,以下代码将一个 C 语言中的字符数组转换成 Lua 中的字符串:
```lua
local ffi = require("ffi")
ffi.cdef[[
char my_string[] = "Hello, world!";
]]
local cdata = ffi.cast("char*", ffi.C.my_string)
local str = ffi.string(cdata)
print(str) -- 输出:Hello, world!
```
在上面的代码中,我们首先使用 ffi.cdef 定义了一个 C 语言中的字符数组 `my_string`,然后通过 `ffi.cast` 将其转换成了 Lua 中的指针变量 `cdata`。最后,我们使用 `ffi.string` 将 `cdata` 指向的整个内存块转换成了字符串,并将其输出到控制台上。
如果我们只想转换 `my_string` 中的前 5 个字符,可以这样做:
```lua
local ffi = require("ffi")
ffi.cdef[[
char my_string[] = "Hello, world!";
]]
local cdata = ffi.cast("char*", ffi.C.my_string)
local str = ffi.string(cdata, 5)
print(str) -- 输出:Hello
```
这样,`ffi.string` 函数就只会将 `cdata` 指向的前 5 个字符转换成字符串,并将其输出到控制台上。