2014-09-03 93 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))) 

所以,是的,你必须转换为字符串。但是,你可以推迟,直到写电话之前。