在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
相关产品推荐
相关产品推荐

