【语法】
一、隐蔽陷阱
把十进制 255 转二进制,逐位收集余数后忘了反转拼接,低位在前高位在后,11000000 与 11111111 混在一起分不清谁对。
二、底层原理
十进制转 k 进制:反复整除 k 收集余数,先得到的余数是最低位,收集完毕把序列倒过来拼接。反向转换则按位乘 k 累加还原。255 的二进制是 11111111,八进制 377,十六进制 FF,三种写法同源。
三、正确代码
基础写法(十转 k,含十六进制字母位):
local function toBase(n, k)
if n == 0 then return "0" end
local digits = "0123456789ABCDEF"
local out = {}
while n > 0 do
out[#out + 1] = digits:sub(n % k + 1, n % k + 1)
n = math.floor(n / k)
end
return table.concat(out):reverse()
end
进阶写法(k 转十,双向互验):
local function toDec(s, k)
local v = 0
for i = 1, #s do
v = v * k + tonumber(s:sub(i, i), 36)
end
return v
end
local p = getplayerbyname("radix01")
sendmsg(p, 1, toBase(255, 2) .. " / " .. toBase(255, 16))
sendmsg(p, 1, toDec("FF", 16) .. " 与 " .. toDec("377", 8))
四、引擎验证
255 转 2 输出 11111111、转 16 输出 FF;FF 与八进制 377 均还原 255,往返互验一致。
五、FAQ
问:小数怎么办?
答:小数部分乘 k 取整逐位展开,整数部分照旧。
问:为什么要反转?
答:余数先低后高,读序必须倒置。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、规则机制 线上事故:玩家装备耐久打空才发现,战力拦腰砍半,打不动怪又投诉掉率。耐久提醒立双档:耐久低于三成弹黄…
【语法】 一、机制原理 抛个坑:行列表格要变成列行,每格都搬一遍还新建了整张表——方形矩阵能不能原地换?转置沿对角线折返:只…
【游戏】 一、规则机制 隐蔽的坑:"最近浏览"里同一件商品重复出现五六次,足迹成了复读机。浏览足迹立两条:每次查看先在足迹里…
【语法】 一、机制原理 一行代码拆解:local bucket = math.floor(v / width)。数值分布统计…
【语法】 一、机制原理 一行代码拆解:setmetatable(cfg, {__index = DEFAULTS})。配置对…
【游戏】 一、规则机制 线上事故:结算时玩家追问"我到底打了多少",战斗中没有任何实时输出面板,事后对不上账。输出统计两步走…