Lua - 解决32位Lua编译器上的64位数字问题

目前我正在尝试解码(使用lua)。我拥有的数据是64位十六进制(big endian)。

那个特定的数字需要转换为little endian。除此之外,根据内部逻辑将应用其他位运算。

起初,我认为事情会很容易,考虑到可以使用[bitop](http://bitop.luajit.org/api.html),并简单地应用任何位运算。

现在,不幸的是,我有(请注意,我不能更改此内容),32位的lua编译器,因此,我不能简单地使用这些运算。

我想提出两个问题:

  • 如果我有16进制数

    800A000000000000如何在这种情况下使用32位逐位操作(特别是在库中共享的bit.bswap,bit.rshift,bit.lshift操作)这个 十六进制数字?是否可能将此数字分为2部分, 然后对每个部分应用操作,然后将它们合并 在一起?如果是这样,怎么办?

  • 您有任何好的参考(比如好书)可以让我熟悉算法,我可以做什么,我 当我们谈论比特运算时不能做什么(特别是 使用多个小块表示大数字的情况)

在提出这个问题之前,我找到并阅读了有关相同主题的其他参考资料,但所有这些参考资料都与特定情况更相关(如果您不熟悉该主题,则难以理解):

  1. lua 64-bit transitioning issue
  2. [Does Lua make use of
    64-bit integers?](https://stackoverflow.com/questions/3104722/does-lua-make-use-of-64-bit-integers)
  3. [Determine whether Lua compiler runs 32 or
    64 bit](https://stackoverflow.com/questions/48093429/determine-whether-lua-compiler-runs-32-or-64-bit)
  4. [Comparing signed 64 bit number using 32 bit bitwise
    operations in Lua](https://stackoverflow.com/questions/35488855/comparing-signed-64-bit-number-using-32-bit-bitwise-operations-in-lua)
点赞
用户1149982
用户1149982

经过对这个话题的更加详细的调查、测试和与其他与此主题相关的人的沟通,发表一个答案:

在这种特定情况下,你是否拥有32位或64位编译器(或设备)真的无关紧要。根据lua文档,基于64位浮点数只能表示精度达到53位的整数,而我用作示例的16进制数更大。

这意味着任何一般的位运算都不能用于这些数字。

基本上,这个问题可以重构为:“ 我如何在lua中使用完整的64位的位运算?”。

唯一的解决方案就是使用相关库,或者自己实现(将64位数字分成两个32位数字,并通过自己实现位运算符解决)。

2018-06-25 13:10:14