Lua 4中的十进制转十六进制?

我找到了一个在Lua中将十进制数转换为十六进制颜色值的公式:

http://lua-users.org/lists/lua-l/2004-09/msg00054.html

但是,我对这个公式有几个问题:

  1. 我的输入需要在0到1之间进行归一化,而不是在0到255之间。这是一个潜在的问题吗?
  2. 我被困在Lua 4.01中,而不是最新版本。我无法升级。这是一个问题吗?

谢谢!!

点赞
用户90511
用户90511

在 Lua 5.x 中,您可以使用字符串格式化函数 string.format%x 格式指示符将整数转换为十六进制表示。在您的情况下,代码如下:

local input = 0.5
local output = string.format("%x", input * 255) -- "7F"

我不太熟悉 Lua 4.0.1,因此无法告诉您该函数是否可用(可能在不同的名称下)。话虽如此,如果不可用,那么您可以通过将其变为一个使用 sscanf 的 C 函数来进行解决。

2016-06-13 19:07:57
用户6093953
用户6093953

下面是一个示例函数,展示在http://lua-users.org/lists/lua-l/2004-09/msg00054.html上,它不能转换负数。以下是正数和负数的转换示例:

function decimalToHex(num)
    if num == 0 then
        return '0'
    end
    local neg = false
    if num < 0 then
        neg = true
        num = num * -1
    end
    local hexstr = "0123456789ABCDEF"
    local result = ""
    while num > 0 do
        local n = math.mod(num, 16)
        result = string.sub(hexstr, n + 1, n + 1) .. result
        num = math.floor(num / 16)
    end
    if neg then
        result = '-' .. result
    end
    return result
end
2021-03-26 15:22:27