Lua中如何将string.byte获取的十进制值转为ASCII十六进制值?
Lua字符串转ASCII十六进制值的实现方案
可以直接用Lua的string.format()函数在每行代码里完成转换,不用额外复杂操作。
单个值的转换写法
把你原来的代码改成这样:
local a = string.format("%02X", string.byte(x, 1) or 0)
%02X是格式化规则:将数字转为两位大写十六进制字符串,若数值不足两位(比如十进制10对应十六进制A),会自动在前面补0变成0A- 把原代码里的
or '00'换成or 0,因为string.byte返回的是数字类型,格式化函数需要数字输入,这样当指定位置没有字符时,会用0来格式化,最终得到00
如果需要提取7个位置的值,依次复制修改位置参数即可:
local a = string.format("%02X", string.byte(x, 1) or 0) local b = string.format("%02X", string.byte(x, 2) or 0) local c = string.format("%02X", string.byte(x, 3) or 0) local d = string.format("%02X", string.byte(x, 4) or 0) local e = string.format("%02X", string.byte(x, 5) or 0) local f = string.format("%02X", string.byte(x, 6) or 0) local g = string.format("%02X", string.byte(x, 7) or 0)
更简洁的复用写法
如果觉得重复写格式化代码麻烦,可以封装一个小函数:
-- 定义转换函数,输入字符串和位置,返回对应十六进制字符串 function charToHex(str, pos) return string.format("%02X", string.byte(str, pos) or 0) end -- 调用函数提取值 local a = charToHex(x, 1) local b = charToHex(x, 2) -- ... 后续位置同理
内容的提问来源于stack exchange,提问作者Tyler Field
相关产品推荐
相关产品推荐

