2014-09-03 64 views
0

我使用Luars233庫進行使用Lua的串行通信。我需要發送數據字節而不用ASCII格式轉換它們,但luars232的寫入功能在傳輸之前將數據轉換爲ASCII,即使我將它作爲數字(數據類型)傳遞給函數。請提供可能的幫助使用luars232避免在串行通信中進行ASCII轉換

+0

順便說一句,Lua用於字符串轉換的字符集和編碼是由語言環境決定的,該語言環境特定於線程/進程/用戶/操作系統的時間點。 (提示:除非你這樣做,否則它不太可能是ASCII。) – 2014-09-04 02:08:12

回答

0

我已經通過在字符串數據類型中使用轉義序列解決了該問題,例如'\ 2'會使用luars232的寫入功能將0x02傳遞到串行端口。但是這限制了在傳輸之前對數據執行數學運算。歡迎進一步的建議。

0

庫使用標準Lua規則通過luaL_checklstring將數據參數強制轉換爲字符串。所以,如果你想完全控制數據,你應該傳遞一個字符串。一個Lua字符串是一個計數的字節序列。

當然,正如您發現的那樣,字面轉義字符序列將起作用。

您也可以使用string.char(...)函數,該函數接受零個或多個值爲0-255的列表,並使用這些字節值創建字符串。

如果你有一個字節table sequence,你可以unpack它們放入一個列表:

local bytes = { 27, 76, 117, 97 } 
port:write(string.char(table.unpack(bytes))) 

所以,是的,你必須轉換爲字符串。但是,你可以推遲,直到寫電話之前。