gpt4 book ai didi

c++ - 如何使用 tolua++ 将 lua 字符串(二进制)传递给 c++

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:35 25 4
gpt4 key购买 nike

我有这样一个类:

class SomeClass
{
void initFromBuffer(void* buffer,int length);
void initFromString(const std::string& str);
}

使用 tolua++,得到如下绑定(bind):

static int SomeClass_initFromBuffer00(lua_State* tolua_S)
{
SomeClass* self = (SomeClass*) tolua_tousertype(tolua_S,1,0);
void* buffer = ((void*) tolua_touserdata(tolua_S,2,0));
int length = ((int) tolua_tonumber(tolua_S,3,0));
self->initFromBuffer(buffer,length);
}

和:

static int SomeClass_initFromString00(lua_State* tolua_S)
{

SomeClass* self = (SomeClass*) tolua_tousertype(tolua_S,1,0);
const std::string str = ((const std::string) tolua_tocppstring(tolua_S,2,0));
self->initFromString(str);
tolua_pushcppstring(tolua_S,(const char*)str);
}

现在,我想将二进制数据从 lua 传递到 c++,二进制文件中有 '\0',所以如果我使用 initFromString 传递它,二进制数据将被修剪。但是如果我使用 initFromBuffer 来传递它,我在 `void* buffer = ((void*) tolua_touserdata(tolua_S,2,0)); 处得到了错误的指针,指针为空。

那么,我如何将二进制字符串从 lua 传递到 c++?

最佳答案

也许您应该停止使用 Tolua 的不良 API,而使用普通的 Lua 实际上良好的 API。 std::string 和 Lua 字符串都能够存储嵌入的空字符。 tolua_tocppstring 导致截断的唯一原因是函数名称是一个谎言。它不会将其转换为 C++ 字符串;它将它转换为 C 字符串const char*

正确答案是使用 the proper API function :

std::string fromLuaStack(lua_State *lua, int stackIx)
{
size_t len;
const char *str = lua_tolstring(lua, stackIx, &len);
return std::string(str, len);
}

同样,你可以使用lua_pushlstringstd::string 压入堆栈。

不幸的是 Tolua 没有更好的文档,因为可能有一个函数可以直接完成这一切。如果有,我找不到它。

关于c++ - 如何使用 tolua++ 将 lua 字符串(二进制)传递给 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11360115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com