C tolua 之間互傳 byte

2021-10-23 12:00:14 字數 1438 閱讀 7750

(金慶的專欄 2020.8)

lua中不區分 string 和 byte, 而在 c# 中 string 和 byte 之間轉換涉及編碼。

c# 中一般這樣**

string型別轉成byte:

byte bytearray = system.text.encoding.default.getbytes(str);
byte轉成string:

string str = system.text.encoding.default.getstring(bytearray);
default 編碼是本機當前所用編碼,還可以用 ascii, utf8 等其他編碼。

測了在 lua 中讀入一塊2進製資料,呼叫 tolua 匯出的乙個方法,如:

public void print(string s)

測了 default, ascii, utf8, iso-8859-1(latin-1), unicode 發現得到的 byte 會出錯。

也試了 c#中使用buffer.blockcopy()方法將string轉換為byte array的方法

發現 tolua 傳到 c# 的 string 已經是編碼過的,直接複製也是錯的。

xlua 也有相同問題,unity xlua 從lua傳遞byte資料到c#

使用 memorystream物件來傳遞byte資料,確實有點繞。

tolua 中有個 luabytebuffer,可以用來傳遞 byte.

tolua#中的luabytebuffer類

從 lua 傳 byte 到 c#, 只需要將引數 string 改為 luabytebuffer:

public void print(luabytebuffer luabytebuffer)

更正確又簡單的方法是用 luabytebufferattribute:

[luabytebufferattribute]

public void print(byte buf)

最終發現不需要 luabytebufferattribute,直接用 byte 就行:

public void print(byte buf)

c# 傳 byte 到 lua, 預設為 「system.byte」(userdata),可以用 tostring() 轉為 lua string:

s = tolua.tolstring(result)
如果可以,應該給資料加上標籤[luabytebufferattribute],這樣傳到 lua 就是 string。

或者在c#建乙個luabytebuffer把byte傳給lua。

linux系統之間互傳檔案

參考 1.檔案複製 本機 遠端伺服器 scp home shaoxiaohu test1.txt shaoxiaohu 172.16.18.1 home test2.txt 其中,test1為原始檔,test2為目標檔案,shaoxiaohu 172.16.18.1為遠端伺服器的使用者名稱和ip位址...

linux系統之間互傳檔案

1.檔案複製 本機 遠端伺服器 scp home shaoxiaohu test1.txt shaoxiaohu 172.16.18.1 home test2.txt 其中,test1為原始檔,test2為目標檔案,shaoxiaohu 172.16.18.1為遠端伺服器的使用者名稱和ip位址 2....

windows 與CentOS之間互傳檔案操作步驟

原文 工具 securecrt,xshell。步驟一 安裝lrzsz軟體,root許可權下。安裝lrzsz zmodem 對於centos系統 1 root www yum install lrzsz 對於debian系統 1 root www apt get install lrzsz 步驟二 開...