如何在Lua中移位和掩码整数位?

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

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

Lua 没有位运算符。我怎么在 Lua 中做到这一点?这是为了移动应用程序,外部二进制库来扩展 Lua 很可能在所有设备上都不起作用。您能推荐任何纯 Lua 解决此问题的方法吗?

点赞
用户2205429
用户2205429

我不懂 Lua,但可以给你一个大致的思路。n 次右移等同于除以 2^n。你可以先除以 2^8 = 256 来获取高位字节,然后乘以除以 2^8 来得到低位字节。

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

这里假设所有操作都是无符号整数操作。

2013-04-22 23:44:22
用户1971981
用户1971981

基于 @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
2013-04-23 00:13:50