像Python一样在Lua中编码(ord函数)

时间:2018-11-03 02:31:55

标签: python lua

我想在Lua中翻译以下代码段:

...  
this.attributes.healthscores.scores['swollen'].score = swollenScore;
this.attributes.healthscores.timestamp = Date.now();

this.response.speak("Health Scores Recorded");  
...

它会打印原始号码: 1541144871000

1 个答案:

答案 0 :(得分:1)

如果您安装bigint,则此版本可用于lua 5.2:

local bigint = require "bigint"

function toLong(s) 
    ret = bigint:new(0)
    for i=1,string.len(s),1 do
        -- (leftshift(8) is just like times-256, but faster)
        ret = ret:leftshift(8) + bigint:new(string.byte(s, i))
    end
    return ret
end

在lua 5.2之前,不支持“ \ xAB”样式的语法,但是对于ASCII大写字母A,您可以使用“ \ 65”之类的小数。

顺便说一句,您可以这样做而无需bigint,例如:

function numLong(s)
    ret = 0
    for i=1,string.len(s),1 do
        ret = (ret * 256) + string.byte(s,i)
    end
    return ret
end

最大的区别在于,bigint将表示任意大的数字,而在Lua中默认情况下,正常数字值是浮点型,并且对实际可用的位数具有精度限制(尽管在我的机器上,这两种表示形式我在测试您的具体情况时也是如此)。

那是说:如果您需要任意大数字表示,请使用bigint或发疯。

哦,顺便说一句:您确实意识到在计算数字时使用的是big-endian(或“网络字节顺序”),对吗?请小心在char字符串和uint64s之间进行交换(特别是如果目标计算机是像Intel盒一样的低端字节序的话)...