LUA位运算

LUA没找到位运算,网上找了了一段,发现有问题经过修改测试如下:
CRC里的位运算搞定
local function BitOR(a,b)–Bitwise or
local p,c=1,0
while a+b>0 do
local ra,rb=a%2,b%2
if ra+rb>0 then c=c+p end
a,b,p=(a-ra)/2,(b-rb)/2,p2
end
return c
end
local function BitXOR(a,b)–Bitwise or
local p,c=1,0
while a+b>0 do
local ra,rb=a%2,b%2
if ra~=rb then c=c+p end
a,b,p=(a-ra)/2,(b-rb)/2,p
2
end
return c
end
local function BitNOT(n,bit)
local p,c=1,0
while bit>0 do
local r=n%2
if (r==0) then c=c+p end
n,p=(n-r)/2,p*2
bit=bit-1
end
return c
end

local function BitAND(a,b)–Bitwise and
local p,c=1,0
while a>0 and b>0 do
local ra,rb=a%2,b%2
if ra+rb>1 then c=c+p end
a,b,p=(a-ra)/2,(b-rb)/2,p*2
end
return c
end
function crc16(buf,len)
–local poly = 0xA001;

local h = 0xffff
local lsb = 0
--local byte=0;

for j=1,len,1 do
    --h ^= *puchMsg;
    if(string.byte(buf,j) ==0x03) then
        print("(string.byte(buf,j) ==0x03)")
    end
    h =BitXOR(h,string.byte(buf,j))
    for i=1,8,1 do
        --lsb = h & 0x0001;		//取CRC的移出位
        lsb = BitAND(h,0x0001)
        --h >>= 1;
        h=(h-lsb)/2
		--if (lsb == 1)
		--{
			--h ^= 0x8408;
        --}
        if(lsb==1) then
            h=BitXOR(h,0x8408)
        end

    end
end
--h ^= 0xffff;
h=BitAND(h,0xffff)
h=BitXOR(h,0xffff)
ret = h
--crc16_h = (uchar)(h>>8);
--hi=BitAND(h/(2^8),0xff)
--crc16_l = (uchar)(h);
--lo=BitAND(h,0xff)
--print(hi)
--print(lo)
--print(string.char(lo))
--ret = BitOR((hi*(2^8)),lo)
  
return ret

end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值