我目前正在尝试将十六进制字符串转换为其有符号int的值。

例:

0000000E - 14
FFFFFFF2 - -14


因此:将值转换为无符号值很容易:

print(tonumber("0000000E", 16)) // outputs 14


负值可以这样解析:

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


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

因此:如何将带符号的十六进制整数转换为LUA编号?

最佳答案

最好的答案可能是埃格(Egor)的评论:

num = (tonumber("FFFFFFF2", 16) + 2^31) % 2^32 - 2^31

10-05 19:16