编写一个包含位运算符的Lua函数。
2013-5-10 8:39:5
收藏:0
阅读:129
评论:3
我有以下算法,我想在lua中实现它。我正在寻找如何在lua中实现位运算的方法。
void wepkey64(char *passphrase, unsigned char k64[4][5])
{
unsigned char pseed[4] = {0};
unsigned int randNumber, tmp;
int i, j;
for(i = 0; i < strlen(passphrase); i++)
{
pseed[i%4] ^= (unsigned char) passphrase[i];
}
randNumber = pseed[0] | (pseed[1] << 8) | (pseed[2] << 16) | (pseed[3] << 24);
for (i = 0; i < 4; i++)
{
for (j = 0; j < 5; j++)
{
randNumber = (randNumber * 0x343fd + 0x269ec3) & 0xffffffff;
tmp = (randNumber >> 16) & 0xff;
k64[i][j] = (unsigned char) tmp;
}
}
}
在lua脚本中,这个函数的等价物是什么?特别是位运算。
点赞
用户577603
看一下 Lua 标准库自从 5.2 版本开始的 bitlib 库。十六进制整数字面量像 C 语言中那样工作。
这里的一个主要的问题是,Lua 使用双精度浮点数来表示数字,但是由 bitlib 定义的操作是在 32 位整数上执行的。正如文档所述,这两种表示之间的转换有时会导致未定义的(即实现特定的)行为。
2013-05-10 08:36:30
用户1162141
最近版本的 Lua 已经支持这个功能http://www.lua.org/manual/5.2/manual.html#6.7,但如果你使用的是较旧的版本:
randNumber = pseed[0] | (pseed[1] << 8) | (pseed[2] << 16) | (pseed[3] << 24);相当于 pseed[0] + (pseed[1] * 256) + (pseed[2] * 65536) + (pseed[3] * 16777216)
tmp = (randNumber >> 16) & 0xff; 相当于 (randnumber / 65536) % 0x100 (这将是整数除法和模数操作)
randNumber = (randNumber * 0x343fd + 0x269ec3) & 0xffffffff; 稍微近似于 (randNumber * 0x343fd + 0x269ec3) % 0x100000000;
异或 ( ^ ) 可以实现为 A^B=A+B-2(A&B)
2013-05-10 09:25:40
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
在标准 Lua 5.1 中没有位运算。不过你有两种解决方法:
我会选择第二个选项。