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

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

我已经彻底搜索了这个问题,但我只找到了一个不能与带有签名的功能。

我甚至找不到任何解释如何做到这一点的材料,因此如果有人能链接给我一些东西,我将非常感激。

点赞
用户33252
用户33252

如果你的 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));
2015-01-27 22:27:41