我正在创建一个Lua脚本,它将计算温度值,然后将此值格式化为4位十六进制数字,该数字必须始终为4位数字。将答案作为字符串可以。
以前在C语言中我已经可以使用
data_hex=string.format('%h04x', -21)
这将返回ffeb
但是我在Lua中无法使用'h'字符串格式化程序 删除“ h”并不能满足否定答案,即
data_hex=string.format('%04x', -21)
print(data_hex)
返回ffffffeb
data_hex=string.format('%04x', 21)
print(data_hex)
返回0015
是否有一个方便且可移植的等效于'h'字符串格式化程序?
答案 0 :(得分:1)
我建议您尝试使用按位AND来截断要打印的值的任何前导十六进制数字。
如果您有要打印的变量temp
,则可以使用data_hex=string.format("%04x",temp & 0xffff)
之类的东西,它会删除前导十六进制数字,而仅留下最低有效的4个十六进制数字。
我喜欢这种方法,因为它减少了字符串操作,并且与带符号的16位数字的实际数据类型一致。是否要减少字符串操纵是否会取决于温度轮询的速率。
有关format
函数的更多信息,请参见The String Library article。