lua可以对单个字符和数字之间进行转换吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua可以对单个字符和数字之间进行转换吗相关的知识,希望对你有一定的参考价值。

参考技术A ua中的类型转换:
1)lua
当中也有隐士转换(自动)和显示转换(强制),转换的规则如下:
a)隐式转换:如果对”数字“字符串做算数算数运算,lua会自动将数字字符串转换成整数,然后再进行运算。但是如果该字符串包括了其他非数字字符(两边的空白除外),则会转换错误,lua不会自动将char转换成其ascii值的。你遇到就是这个问题。
如果数值进行字符串操作,比如连接,也同样会自动将数字转换成字符串的。
b)显式转换:通过内置函数tostring,tonumber
,分别进行数字和字符串之间的转换。同样,如果字符串里有非数值字符,tonumber
会转换报错的。

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

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

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

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

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

    我的输入需要在 0 和 1 之间进行归一化,而不是 0 和 255。这是一个潜在的问题吗? 我坚持使用 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) 【参考方案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 对象。

以上是关于lua可以对单个字符和数字之间进行转换吗的主要内容,如果未能解决你的问题,请参考以下文章

Lua 字符串转 int

从Int获取单个数字而不使用字符串?

如何用JavaScript实现Hex与ASCII之间的转换

如何在 unicode 形式之间进行转换:字符串、名称、数字

Lua - 字符串行为的数字

Java的字符串都有啥?字符串可以转换为任意数值吗?