0

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

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

Lua 没有位运算符。我怎样才能在 Lua 中做到这一点?这是用于移动应用程序和扩展 Lua 的外部二进制库,如果有的话,很可能不适用于所有设备。您可以建议任何针对此问题的纯 Lua 解决方案吗?

4

2 回答 2

5

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

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

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

于 2013-04-22T23:44:22.693 回答
2

基于@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-23T00:13:50.647 回答