当前位置 : 主页 > 网络编程 > lua >

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

来源:互联网 收集:自由互联 发布时间:2021-06-23
目前我正在尝试解码数据(使用lua).我有的数据是64位十六进制(大端). 该特定数字需要转换为小端.除此之外,稍后将基于内部逻辑应用其他按位操作. 现在,最初我认为事情会很简单,记住我
目前我正在尝试解码数据(使用lua).我有的数据是64位十六进制(大端).

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

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

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

我想问两个问题:

>如果我有十六进制

800A000000000000如何使用32位按位操作(特别是在这种情况下的操作,如上面共享的库中的bit.bswap,bit.rshift,bit.lshift)
十六进制数?可以将这个数字分成两部分,
然后对它们中的每一个应用操作然后合并它们
再度携手?如果是这样的话,怎么样?
>你有什么好的参考(如一本好书)我可以用来
熟悉算法,我能做什么,做什么
当我们谈论按位操作时(特别是
使用多个小块表示大量数字)

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

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

在对此主题进行更详细的调查之后,测试并与其他人进行沟通,并发表与此主题相关的意见,并发布答案:

在这种特定情况下,你有32位或64位编译器(或设备)真的没关系.您能够基于lua doc表示的最大整数:64位浮点数只能表示高达53位精度的整数,而我用作示例的十六进制数字大于此值.

这意味着任何类型的通用位操作都不适用于这些数字.

基本上,这个问题可以在以下方面重建:“我如何在完全64位的lua中使用逐位操作?”.

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

网友评论