在Lua 4中将十进制转换为十六进制?

问题描述 投票:0回答:3

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

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

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

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

谢谢!!

lua hex type-conversion
3个回答
15
投票

在 Lua 5.x 中,您可以使用 string.format 函数和

%x
格式说明符将整数转换为其十六进制表示形式。在你的情况下,它看起来像这样:

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

我不太了解Lua 4.0.1,所以我无法告诉你这个功能是否可用(可能以不同的名称)。也就是说,如果不是,那么您可以通过将其转换为使用

sscanf
的 C 函数来解决此问题。


0
投票

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

0
投票

负十进制转换为正十六进制的示例。

local input = -0.5
local output = string.format("%x", math.floor(input * 255)):sub(-2)

如果您需要转换非两位数的十六进制数字,请更改

string.sub
参数。

© www.soinside.com 2019 - 2024. All rights reserved.