Lua - 在32位lua编译器上处理64位数

时间:2018-04-17 22:28:09

标签: lua hex 64-bit bitwise-operators

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

该特定数字需要转换为小端。除此之外,其他按位操作将在以后基于内部逻辑应用。

现在,我最初认为事情会很简单,记住我可以使用bitop并简单地应用我想要的任何按位操作。

现在,不幸的是,我有(请注意我无法更改此),32位lua编译器,因此,我不能简单地使用这些操作。< / p>

我想问两个问题:

  • 如果我有十六进制

    800A000000000000我怎样才能使用32位按位操作(特别是在本例中的操作,如上面共享的库中的bit.bswap,bit.rshift,bit.lshift) 十六进制数?可以将这个数字分成两部分, 然后对它们中的每一个应用操作然后合并它们 再度携手?如果是这样,怎么办?

  • 你有什么好的参考资料(比如一本好书)我可以用来 熟悉算法,我能做什么,做什么 当我们谈论按位操作时(特别是 用多个小块代表巨大的数字)

在提出这个问题之前,我发现并阅读了同一主题的其他参考文献,但所有这些都与具体案例有关(除非您熟悉该主题,否则很难理解):

  1. lua 64-bit transitioning issue
  2. Does Lua make use of 64-bit integers?
  3. Determine whether Lua compiler runs 32 or 64 bit
  4. Comparing signed 64 bit number using 32 bit bitwise operations in Lua

1 个答案:

答案 0 :(得分:3)

在对该主题进行了更详细的调查之后,对与该主题相关的观点进行了测试和与其他人的交流,并发布了答案:

在这种情况下,您是否拥有32位或64位编译器(或设备)真的没关系。您可以根据lua doc来表示最大的整数: 64位浮点数只能表示精度最高为53位的整数,而我作为示例使用的十六进制数要大得多。 / p>

这意味着对于这些数字,任何类型的常规按位运算都将不起作用。

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

唯一的解决方案是为此使用库或由自己实现(将64位数字分隔为两个32位数字并由自己实现按位运算符)