我有以下算法,我想在 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 scipting 中的等价物是什么?特别是按位运算
最佳答案
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
(即整数 div 和模数运算)randNumber = (randNumber * 0x343fd + 0x269ec3) & 0xffffffff;
大致是`(randNumber * 0x343fd + 0x269ec3) % 0x100000000;
XOR (^) 可以实现为 A^B=A+B-2(A&B)
关于c - 用lua写一个函数(包含按位运算),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16477833/