C 转 Lua - 奇怪的结果

我有一个 C 函数想要转换成 Lua 但是我从 Lua 得到了奇怪的结果:

unsigned short crc16(const char* pstrCurrent, int iCount)
{
    unsigned short wCRC = 0;
    int iIndex = 0;

    while(--iCount >= 0)
    {
        wCRC = wCRC ^ ((int)(*pstrCurrent++) << 8);
        printf ("WCRC = %u\n", wCRC);
    }
    return (wCRC & 0xFFFF);
}

以下是我如何开始 Lua:

local function crc16(keyCurrent, byteCount)
    wCRC = 0
    byteIndex = 1
    local crcInput = {}

    while byteCount > 0 do
        print ("BYTE COUNT= " .. byteCount)

        wCRC=bit32.bxor(wCRC, bit32.lshift(keyCurrent[byteIndex], 8))
        print ( "WCRC = " .. wCRC )

        byteCount = byteCount-1
        byteIndex = byteIndex+1

    end
end

是我的 Lua 转换有误吗? 这是我第二次或第三次使用 Lua,不太确定自己哪里出错了。

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*更新 ********************

所以这是完整的 C 和 LUA 和一个小测试代码:

unsigned short crc16(const char* pstrCurrent, int iCount)
{
    unsigned short wCRC = 0;
    int iIndex = 0;
    // 其他字符每个都执行此操作
    while(--iCount >= 0)
    {
        // 获取计算的字节信息并将指针移到下一个字符
        wCRC = wCRC ^ ((int)(*pstrCurrent++) << 8);
        for(iIndex = 0; iIndex < 8; ++iIndex)
        {
            if(wCRC & 0x8000)
            {
                wCRC = (wCRC << 1) ^ 0x1021;
            }
            else
            {
                wCRC = wCRC << 1;
            }
        }
    }
    return (wCRC & 0xFFFF);
}

和 LUA 的转换:

function crc16 (keyCurrent, iCount)
    wCRC = 0
    byteIndex = 1
    iIndex = 0
    local crcInput = {}

    while iCount >= 1 do
        wCRC = bit32.bxor (wCRC, bit32.lshift(keyCurrent[byteIndex], 8))
                for iIndex=0,8 do
                    if (bit32.band (wCRC, 0x8000) ~= nil ) then
                            wCRC = bit32.bxor (bit32.lshift (wCRC, 1), 0x1021)
                    else
                            wCRC = bit32.lshift (wCRC, 1)
                    end

                end
        iCount = iCount-1
        byteIndex = byteIndex+1
    end
    return (bit32.band (wCRC, 0xFFFF))
end

local dKey = {}
dKey = {8, 210, 59, 0,  18, 166, 254, 117}
print ( "CRC = " .. crc16 (dKey ,8) )

在 C 中,对于相同的数组我得到:CRC16 = 567 在 LUA 中,我得到:CRC = 61471

有人可以告诉我是哪里出错了吗?

谢谢

点赞
用户1979882
用户1979882
It seems they yield the same results:

[pure-C](http://www.tutorialspoint.com/compile_c_online.php?PID=0Bw_CjBb95KQMdy1qRWtvdmVtcVU)

WCRC = 18432
WCRC = 11520
WCRC = 16640
WCRC = 11520

[pure-Lua](http://www.tutorialspoint.com/execute_lua_online.php?PID=0Bw_CjBb95KQMcE5sbGJINkhYOHc)

BYTE COUNT= 4
WCRC = 18432
BYTE COUNT= 3
WCRC = 11520
BYTE COUNT= 2
WCRC = 16640
BYTE COUNT= 1
WCRC = 11520

[ASCII convertor:](http://onlinecalculators.brainmeasures.com/Conversions/StringtoAsciiCalculator.aspx)

What do you mean?

似乎它们产生了相同的结果:

pure-C

WCRC = 18432 WCRC = 11520 WCRC = 16640 WCRC = 11520

pure-Lua

BYTE COUNT= 4 WCRC = 18432 BYTE COUNT= 3 WCRC = 11520 BYTE COUNT= 2 WCRC = 16640 BYTE COUNT= 1 WCRC = 11520

ASCII 转换器:

你是什么意思呢?

2016-09-16 11:37:46
用户5675002
用户5675002

改动后的 Lua 示例存在错误。

  1. bit32.band() 返回数字。数字0不等于 'nil',那是完全不同的类型。你试图将数字与 nil 进行比较,而这种检查总会失败。

  2. for iIndex=0,8 do 迭代9次,包括最后一个索引8。

2016-09-17 07:33:48