如何在Lua中从整数移位和屏蔽位?

时间:2013-04-22 23:32:16

标签: lua corona

我正在将一个Objective-C iOS应用程序移植到使用Lua的CoronaSDK。我有一个签名 16位整数,我想隔离其中的高字节和低字节。在C中你可以做到:

uint8_t a = (dx >> 8) & 0xff;
uint8_t b = dx & 0xff;

Lua没有按位运算符。我怎么能在Lua做到这一点?这对于移动应用程序和外部二进制库来扩展Lua很可能不适用于所有设备(如果有的话)。你可以建议任何纯粹的Lua解决这个问题的方法吗?

2 个答案:

答案 0 :(得分:4)

我不认识Lua,但可以给你一个大致的想法。右移n等于除以2 ^ n。您可以先除以2 ^ 8 = 256得到MSB,然后乘以除以2 ^ 8得到LSB。

MSBs = dx / 256
LSBleftsifted = (ds * 256)
LSBs = LSBleftsifted / 256

这是考虑到所有这些都是无符号整数运算。

答案 1 :(得分:1)

基于@ash回答,这里有几个Lua函数。我确信它们可以被推广,但这可以满足我的需求:

local function getLowByte16( value )
    local high_value = math.floor(value/256)
    high_value = high_value*256
    local low_value = value - high_value
    return low_value
end

local function getHighByte16( value )
    local high_value = math.floor(value/256)
    return high_value
end