2011-05-31 49 views
3

如何將字節數組作爲參數傳遞給來自C++代碼的lua腳本方法? 只允許int,float或string數據類型嗎? 另外我怎樣才能從lua腳本方法檢索字節數組? 我會傳遞一個原始字節數組到腳本。它會解析並使用它。 Thanx。從C++將字節數組傳遞給lua腳本方法

回答

2

Int和float值將被轉換爲Lua的數字類型(默認爲double)。

如果腳本本身只需要保持一個指向函數之間傳遞,C數據的斑點通常被推作爲光用戶數據:

lua_pushlightuserdata(L, bufptr); 

當通過字節到Lua的數組,字符串通常使用(任意數據的字符串可以使用lua_pushlstring)創建:

lua_pushlstring (L, bufptr, buflen); 

這將創建在Lua一個不可變的字符串,它只能通過創建新的字符串進行修改。

如果你需要在Lua中使用可變字節緩衝區(不推薦 - 低級字節操作是C設計的,而Lua不是),最好的辦法是用方法爲緩衝區創建一個用戶數據類型爲用例量身定製(個人職位爲數字,範圍爲字符串或數字表格)。

5

取決於你想要做什麼。 Lua字符串是不可變的字節數組,所以如果它們很小,那麼最好將字節數組轉換成一個字符串,並將其傳遞給lua_pushlstring,並將其作爲參數傳入 - 是的,支持嵌入式\ 0並且工作正常。但是因爲它們是不可變的,所以每當你想修改它時,Lua最終都會複製這個字符串,所以它可能不適合你的需求。

其他選項是:你的C++字節數組和一個Lua陣列之間

  • 複製數據來回(即數字表)。這在內存上會相當昂貴,但可能是最簡單的方法。

  • 將你的C++字節數組封裝在lightuserdata中,並提供Lua綁定讓你直接訪問它。這是最高效的,但是代碼非常多。