簡體   English   中英

如何將 Terra 原始字符串轉換為 Lua 字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM