Lua - 解决32位Lua编译器上的64位数字问题
2018-4-18 0:47:21
收藏:0
阅读:245
评论:1
目前我正在尝试解码(使用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部分, 然后对每个部分应用操作,然后将它们合并 在一起?如果是这样,怎么办?您有任何好的参考(比如好书)可以让我熟悉算法,我可以做什么,我 当我们谈论比特运算时不能做什么(特别是 使用多个小块表示大数字的情况)
在提出这个问题之前,我找到并阅读了有关相同主题的其他参考资料,但所有这些参考资料都与特定情况更相关(如果您不熟悉该主题,则难以理解):
- lua 64-bit transitioning issue
- [Does Lua make use of
64-bit integers?](https://stackoverflow.com/questions/3104722/does-lua-make-use-of-64-bit-integers) - [Determine whether Lua compiler runs 32 or
64 bit](https://stackoverflow.com/questions/48093429/determine-whether-lua-compiler-runs-32-or-64-bit) - [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)
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

经过对这个话题的更加详细的调查、测试和与其他与此主题相关的人的沟通,发表一个答案:
在这种特定情况下,你是否拥有32位或64位编译器(或设备)真的无关紧要。根据lua文档,基于64位浮点数只能表示精度达到53位的整数,而我用作示例的16进制数更大。
这意味着任何一般的位运算都不能用于这些数字。
基本上,这个问题可以重构为:“ 我如何在lua中使用完整的64位的位运算?”。
唯一的解决方案就是使用相关库,或者自己实现(将64位数字分成两个32位数字,并通过自己实现位运算符解决)。