十六进制转换为int32-值

我现在正在尝试将一个十六进制字符串转换为其作为带符号int的值。

例子:

0000000E - 14
FFFFFFF2 - -14

所以:转换无符号值的值很容易:

print(tonumber("0000000E", 16)) // 输出14

负值可以像这样解析:

num = tonumber("FFFFFFF2", 16)
print(4294967296 - num - num)

但不幸的是,我需要检测是否对此设置了MSB。 如果我的lua实现支持Bit-Library,那么这很容易,但不幸的是这并不是事实。

那么:我如何将带符号的十六进制整数转换为LUA数字?

点赞
用户2196426
用户2196426

最好的答案可能是来自评论的Egor:

num = (tonumber("FFFFFFF2", 16) + 2^31) % 2^32 - 2^31
2016-05-26 18:12:59