【问题标题】:Convert decimal to hex in Lua 4?在Lua 4中将十进制转换为十六进制?
【发布时间】:2016-10-14 06:11:12
【问题描述】:

我发现这个公式可以在 Lua 中将十进制数字转换为十六进制颜色值:

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

不过,我有几个关于公式的问题:

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

谢谢!!

【问题讨论】:

  • 你确定它是 Lua 4.1 而不是 5.1? Lua 5.1 仍然是常用的(因为它是 LuaJIT 支持的 Lua 版本),但 Lua 4.1 非常非常老,你将很难找到好的文档! lua.org/versions.html
  • 根据Lua site 没有这样的4.1版本
  • 你能举出你想要的输入和输出的例子吗?我通常看到十六进制用于整数,所以将它们用于 0 到 1 之间的东西有点不寻常。
  • 输入 0.5,输出 80
  • @posfan12 - output = format("%02x", input*256)

标签: lua hex type-conversion


【解决方案1】:

在 Lua 5.x 中,您可以使用带有 %x 格式说明符的 string.format 函数将整数转换为十六进制表示。在您的情况下,它看起来像这样:

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

我不太了解 Lua 4.0.1,所以我无法告诉您此功能是否可用(可能使用不同的名称)。也就是说,如果不是,那么您可以通过将其转换为使用 sscanf 的 C 函数来解决此问题。

【讨论】:

    【解决方案2】:

    演示的示例函数在 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
    

    【讨论】:

    • 感谢您的回答。但是stringmath 是 Lua 5 对象。
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2017-07-31
    • 2015-11-11
    相关资源
    最近更新 更多