1.Lua中string可以包含二进制数据
如下:
--读取二进制数据
local file = io.open("test.wav", "rb")
local data = file:read("*a")
print("%s", data)
file:close()
--重新写二进制数据
file = io.open("test2.wav", "wb")
file:write(data)
file:close()
以上,data就是一个二进制的string。
用print打印,则会截断在\0处。
然后我们通过file:write再写回文件中。
2.Lua中string可以作为buffer和c/c++的交互
从lua传入c时,string可以转换为const char*, 而从c返回一个buffer给lua时,也可以push一个string进去。
注意:
(1)从lua传入c时,需要附带传入buffer size
(2)将buffer传入到lua时,使用 lua_pushlstring(l, buf, bufSize)不要使用lua_pushstring
因为lua_pushstring的实现中,会使用strlen计算字符串长度,对于buffer这显然是错误的。
LUA_API void lua_pushstring (lua_State *L, const char *s) {
if (s == NULL)
lua_pushnil(L);
else
lua_pushlstring(L, s, strlen(s));
}
(3)在lua代码中,如果使用连接操作符..将一个包含二进制数据的string和一个普通string连接,则string
可能被截断为一个普通string。