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

Lua-在32位Lua编译器上处理64位数字,lua,hex,64-bit,bitwise-operators,Lua,Hex,64 Bit,Bitwise Operators,目前我正在尝试解码数据(使用lua)。我拥有的数据是64位十六进制(大端) 这个特定的数字需要转换成小端。除此之外,其他按位操作将在稍后基于内部逻辑应用 现在,一开始我认为事情会很简单,记住我可以使用并简单地应用我想要的任何逐位运算 现在,不幸的是,我有(,请注意,我无法更改此),32位lua编译器,因此,我不能简单地使用这些操作 我想问两个问题: 如果我有十六进制 800A000000000000我如何在这台计算机上使用32位操作(特别是在这种情况下,从我上面共享的库中使用bit.bswap

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

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

现在,一开始我认为事情会很简单,记住我可以使用并简单地应用我想要的任何逐位运算

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

我想问两个问题:

  • 如果我有十六进制

    800A000000000000
    我如何在这台计算机上使用32位操作(特别是在这种情况下,从我上面共享的库中使用bit.bswap、bit.rshift、bit.lshift等操作) 十六进制数?是否可以将此编号拆分为两部分, 然后对它们中的每一个应用操作,然后合并它们 又在一起了?如果是这样,怎么办

  • 你有什么好的参考书(比如一本好书)可以让我用它来学习吗 熟悉算法,我能做什么,我能做什么 当我们谈论按位操作时(特别是 使用多个小数据块表示大量数据)
在提出这个问题之前,我发现并阅读了关于同一主题的其他参考文献,但它们都与具体案例有关(除非您熟悉该主题,否则很难理解):


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

    在这种特定情况下,您是否有32位或64位编译器(或设备)并不重要。基于lua doc可以表示的最大整数:64位浮点数只能表示高达53位精度的整数,我作为示例使用的十六进制数比这个数字大

    这意味着任何类型的通用位操作都不会对这些数字起作用

    基本上,这个问题可以在以下内容中重新构造:“如何在lua中对完整的64位使用逐位操作?


    唯一的解决方案是使用库来实现这一点,或者自己实现它(将64位数字分隔为两个32位数字,并自己实现位运算符)

    您使用的是哪个版本的Lua?它是有整数(5.3)还是只有浮点数(5.2及更早版本)?lua的5.2版本。我们计划改变现状,同时使用64位版本。但经过昨天的研究,我发现这并不意味着什么,老实说,考虑到上面的数字比2^52大,这让我想到了和最初一样的问题。lua中的所有位运算似乎都应用于2^52以上的数字,结果是0。这可能是因为64位浮点中可以用精度为1表示的最大整数是2^53(请参阅)。也就是说,如果超过这个值,连续整数之间的差值是2。在32位浮点中,为2^24。所以,我无法回答您最初的问题,但我认为如果您只有64位浮点(double),您仍然需要将64位整数拆分为两个Lua数。