C 转 Lua - 奇怪的结果
2016-9-16 18:39:30
收藏:0
阅读:129
评论:2
我有一个 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
有人可以告诉我是哪里出错了吗?
谢谢
点赞
用户5675002
改动后的 Lua 示例存在错误。
bit32.band()返回数字。数字0不等于 'nil',那是完全不同的类型。你试图将数字与nil进行比较,而这种检查总会失败。for iIndex=0,8 do迭代9次,包括最后一个索引8。
2016-09-17 07:33:48
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

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 转换器:
你是什么意思呢?