如何将数字转换为有符号/无符号16/32位?

时间:2015-01-27 21:57:59

标签: lua bit-manipulation bitwise-operators

好的,所以我需要使用udp发送有符号/无符号16/32位整数。如何将Lua数转换为这些类型,以便我可以逐字节写入。我可以访问按位运算符。

我已经彻底搜索过这个问题,但我发现只有一个函数不能用于签名。

我甚至找不到任何材料来解释如何做到这一点,所以如果有人能把某些东西联系起来,我会非常感激。

1 个答案:

答案 0 :(得分:5)

如果您的Lua号码在您所写类型的范围内,则无需转换。您只需要提取字节并写入它们。

假设大端(网络秩序)和Lua 5.3:

local b16H = (x >> 8) & 0xff;
local b16L = (x     ) & 0xff;
my_output(string.char(b16H, b16L));

这适用于签名和无签名。

对于32位

local b32HH = (x >> 24) & 0xff;
local b32HL = (x >> 16) & 0xff;
local b32LH = (x >>  8) & 0xff;
local b32LL = (x      ) & 0xff;
my_output(string.char(b32HH, b32HL, b32LH, b32LL));