目前我正在尝试解码数据(使用lua)。我的数据是64位十六进制(大端)。
该特定数字需要转换为小端。除此之外,其他按位操作将在以后基于内部逻辑应用。
现在,我最初认为事情会很简单,记住我可以使用bitop并简单地应用我想要的任何按位操作。
现在,不幸的是,我有(请注意我无法更改此),32位lua编译器,因此,我不能简单地使用这些操作。< / p>
我想问两个问题:
如果我有十六进制
800A000000000000
我怎样才能使用32位按位操作(特别是在本例中的操作,如上面共享的库中的bit.bswap,bit.rshift,bit.lshift)
十六进制数?可以将这个数字分成两部分,
然后对它们中的每一个应用操作然后合并它们
再度携手?如果是这样,怎么办?
在提出这个问题之前,我发现并阅读了同一主题的其他参考文献,但所有这些都与具体案例有关(除非您熟悉该主题,否则很难理解):
答案 0 :(得分:3)
在对该主题进行了更详细的调查之后,对与该主题相关的观点进行了测试和与其他人的交流,并发布了答案:
在这种情况下,您是否拥有32位或64位编译器(或设备)真的没关系。您可以根据lua doc来表示最大的整数: 64位浮点数只能表示精度最高为53位的整数,而我作为示例使用的十六进制数要大得多。 / p>
这意味着对于这些数字,任何类型的常规按位运算都将不起作用。
基本上,这个问题可以通过以下方式来重构:“ 我如何在完整的64位上的lua中使用按位运算?”。
唯一的解决方案是为此使用库或由自己实现(将64位数字分隔为两个32位数字并由自己实现按位运算符)