[英]How to convert a Terra rawstring into a Lua string?
我有一些在 Terra 中返回char *
或rawstring
的 C 代碼。
如何將這種類型的值傳遞給 Lua 並將其用作普通字符串?
如果重要的話,原始字符串會在堆上分配(我不需要釋放它)。
使用LuaJIT 的ffi.string
函數:
> terra terrastring()
>> return "hello from Terra"
>> end
> print(terrastring())
cdata<char *>: 0x0e03c050
> print(ffi.string(terrastring()))
hello from Terra
為了證明它甚至可以使用非文字字符串:
> C = terralib.includecstring "#include <stdlib.h>"
> terra cstr()
>> var str = [&int8](C.calloc(4, sizeof(int8)))
>> str[0],str[1],str[2],str[3] = 104,101,121,0
>> return str
>> end
> print(cstr())
cdata<char *>: 0x0e03c000
> ffi = require 'ffi'
> print(ffi.string(cstr()))
hey
請注意ffi.string()
帶有一個可選的長度參數,這可能很方便避免使用strlen
來計算它,並且該字符串被保留在 Lua 中(這可能會泄漏內存)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.