Lua 中从 \xNN 格式中解析十六进制数

我正在读取一些以下格式的字符串:"\x0f\x14\xab "在 Lua 5.3 中。这些字符串包含十六进制数(在"\x"字符之间),我想提取这些数字。例如,我应该能够解析示例中的"0f"、"14"和"ab"(字符串格式可以接受)。我该怎么做呢?

点赞
用户2858170
用户2858170
本地文本 = "\\x0f\\x14\\xab"

你只需要使用一个包含两个十六进制数字的模式和字符串进行匹配。

for hex in text:gmatch("%x%x") do print(hex) end
2020-05-06 06:12:44
用户4984564
用户4984564

下面也是一个使用 LPeg 的解决方案:

local lpeg = require 'lpeg'

-- 匹配 16 进制数字
local hex = lpeg.S('0123456789abcdefABCDEF') ^ 1 / function(s) return tonumber(s, 16) end

-- 匹配以 \x 开头的 16 进制数字或非 \ 字符
local parser = (lpeg.P("\\x")*hex + lpeg.P(1) / error) ^ 1

-- 测试字符串
local text = "\\x0f\\x14\\xab"

-- 匹配结果
print(parser:match(text))

对于简单场景来说,纯 Lua 版本可能更为简洁明了,但如果希望有更多的扩展性,LPeg 是一个很好的选择 :D

2020-05-06 07:18:21
用户4270417
用户4270417
对于每个字节中的十六进制(hex),执行以下操作:
str = string.format("%02X", string.byte(hex))  //将hex转化为十六进制字符串
print(str)   //打印字符串
2021-10-21 22:13:06