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

里克

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

def toLong(s):
  ls = [ord(i) for i in s]
  l = len(ls) -1
  sum = 0
  for i, v in enumerate(ls):
      sum += v*(256**(l-i))
  return sum

print(toLong("\x00\x00\x01f\xd3d\x80X"))

它会打印原始号码:1541144871000

BJ黑色

如果安装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盒一样的低端字节序)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

像函数中的对象一样收到列表

在PowerMock-Mockito中像函数一样重播

包括像php中的函数一样的功能吗?

python中的函数可以像类一样表现吗?

像Matlab的Ezplot一样在python / pyplot中绘制任意二维函数

在Python中像Haskell的重复一样重复函数组合n次

函数继承是否可以像python中的类继承一样?

未来/承诺像Python中的Trio一样?

Python在Scala中像包名称别名一样

像awk一样访问python中的列

像python中的显示一样显示数据

如何像git一样对unicode进行编码/解码?

如何像 youtube 一样编码(压缩)视频?

像C编程一样在lua中创建位域结构

为什么不能像 OCaml 中的常规函数一样传递数据构造函数?

像函数一样组成类型构造函数

Ruby是否具有像Python一样的`bool`函数?

R是否具有像python一样的开头或结尾函数?

如何使Dart生成器函数像Python一样工作?

像正常的python函数一样调用scipy.stats概率分布

您可以像perl一样在python顶部调用main函数吗?

像RxJava / Reactor一样,在Akka中是否可以从Source => Source函数创建Flow?

像go lang中的函数一样的切片移位

如何使属性函数像数据库中的真实字段一样工作

如何在管道链中像常规命令一样使用bash函数?

如何将函数像红宝石中的对象一样对待?

从头开始像库一样的函数,用于C ++中的矩阵乘法

类型错误:如何获得像 Javascript 中的函数一样执行的方法?

将函数像DefinePlugin一样注入Webpack