我有以下算法,我想在 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/

10-12 15:04