我的C#代码中有一个字节数组,需要传递给LuaInterface实例。我可以在Lua中使用pack(),将生成的字符串传递给C#并将其转换为System.Text.Encoding.UTF8.GetBytes()
,但是以其他方式转换似乎不起作用。
有简单的解决方案吗?我希望我能避免将字节数组分配给全局值。
修改:
今天早上我尝试了一些新东西。我尝试使用LuaInterface.GetFunction()
,一切正常,直到它在LuaDLL.cpp中遇到lua_pushstring()
。此时,C#字符串通过Marshal::StringToHGlobalAnsi().ToPointer()
转换为char *。看起来这个函数需要一个以空字符结尾的字符串,而我的字符串的第一个字节是0,所以我在我的lua代码中得到一个空字符串。
答案 0 :(得分:3)
最后将其追溯到lapi.c中对::lua_pushstring()
的调用。它在传入的char *上调用strlen()
。由于我的第一个数据字节为0,它返回0.有一个替代调用lua_pushlstring
,它接受字符串的大小作为参数。更改为调用此函数可以解决问题。
答案 1 :(得分:0)
尝试使用System.Text.ASCIIEncoding.ASCII.GetString对字节数组进行编码,以获取可传递给Lua的字符串。