使用luars232避免串行通信中的ASCII转换

使用luars232避免串行通信中的ASCII转换,lua,serial-port,ascii,Lua,Serial Port,Ascii,我正在使用luars233库进行使用Lua的串行通信。我需要发送数据字节而不转换为ASCII格式,但是luars232的写函数在传输之前将数据转换为ASCII格式,即使我将其作为数字(数据类型)传递给函数。请提供可能的帮助我已通过在字符串数据类型中使用转义序列解决了此问题,例如,“\2”将使用luars232的写入功能将0x02传递到串行端口。但这限制了在传输前对数据执行数学运算。欢迎进一步的建议。库接受数据参数,并使用标准Lua规则将其强制为字符串。因此,如果您想完全控制数据,应该传递一个字符

我正在使用luars233库进行使用Lua的串行通信。我需要发送数据字节而不转换为ASCII格式,但是luars232的写函数在传输之前将数据转换为ASCII格式,即使我将其作为数字(数据类型)传递给函数。请提供可能的帮助

我已通过在字符串数据类型中使用转义序列解决了此问题,例如,“\2”将使用luars232的写入功能将0x02传递到串行端口。但这限制了在传输前对数据执行数学运算。欢迎进一步的建议。

库接受数据参数,并使用标准Lua规则将其强制为字符串。因此,如果您想完全控制数据,应该传递一个字符串。Lua字符串是已计数的字节序列

当然,正如您所发现的,文字转义字符序列将起作用

您还可以使用该函数,该函数获取0-255之间的零或多个值的列表,并使用这些字节值创建字符串

如果有大量字节,可以将它们放入列表:

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

所以,是的,你必须转换成字符串。但是,您可以将其推迟到写调用之前。

顺便说一句,Lua用于字符串转换的字符集和编码由区域设置决定,该区域设置在线程/进程/用户/操作系统特定的时间点上。(提示:除非您这样做,否则它不太可能是ASCII。)