You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:15:13