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

在Lua中如何提取UUID的MSB、LSB并将字符串格式转为二进制格式

Lua 实现UUID字符串提取MSB/LSB并转二进制的方案

标准UUID字符串(格式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)去掉分隔符后为32位连续十六进制字符:

  • 前16位十六进制字符对应64位最高有效位(MSB)
  • 后16位十六进制字符对应64位最低有效位(LSB)
    刚好适配你提到的string.pack(">L>L", msb, lsb)大端64位整数打包逻辑。

完整实现代码

-- 输入:标准带横杠的UUID字符串
-- 输出:msb(64位整数)、lsb(64位整数)
local function get_uuid_msb_lsb(uuid_str)
    -- 移除UUID中的所有横杠
    local raw_hex = uuid_str:gsub("%-", "")
    -- 合法性校验
    if #raw_hex ~= 32 then
        error("Illegal UUID: expected 36-char string with separators")
    end
    -- 拆分前后16位十六进制,转成整数
    local msb = tonumber(raw_hex:sub(1, 16), 16)
    local lsb = tonumber(raw_hex:sub(17, 32), 16)
    return msb, lsb
end

-- 示例调用
local sample_uuid = "150b28fc-3f3f-4c74-83e5-ab6a626e0cb1"
local msb, lsb = get_uuid_msb_lsb(sample_uuid)
-- 打包为16字节二进制UUID
local uuid_binary = string.pack(">L>L", msb, lsb)

注意事项

如果你使用的是32位编译的Lua环境,tonumber处理16位十六进制时可能出现整数溢出。这种情况可以手动实现十六进制串转64位大端整数的逻辑,或者引入luabitop等位运算库辅助处理。

内容的提问来源于stack exchange,提问作者BobJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:24:04