Lua和Python在十六进制转换中的区别

2024-05-16 01:04:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,我有:

>>> mac_string = "68:a8:6d:0b:90:46"
>>> mac_int = int((mac_string).replace(":", ""), 16)
>>> print(mac_int)
115072593268806

在Lua,我有:

> mac_string = "68:a8:6d:0b:90:46"
> mac_int = tonumber(mac_string:gsub(':',''),16)
> print(mac_int)
1.1507259326881e+14

为什么相差4?你知道吗


Tags: stringmacreplaceintluaprinta8gsub
3条回答

在luaversion5.2之前,Luanumber类型使用浮点表示,而Python使用的实际整数只受内存限制。从Lua 5.2 documentation

Number represents real (double-precision floating-point) numbers.

请注意,数字仍然足够精确,但在显示时是四舍五入的。如果在Python中将结果整数转换为float(它也使用双精度浮点),则可以看到相同的数字:

>>> float(115072593268806)
115072593268806.0
>>> '{:.13e}'.format(float(115072593268806))
'1.1507259326881e+14'

第二行的格式和Lua一样编号;小数点后有13位数字,使用科学记数法。你知道吗

您可以告诉Lua使用^{}使用不同的格式打印数字:

print(string.format("%d", mac_int))

我看到lua5.3expanded the number type to support 64-bit integers,所以升级到该版本也许可以解决这个问题。你知道吗

您可能正在使用Lua5.2或更低版本。C中的数字类型默认为double类型。print的默认格式没有足够的精度。你知道吗


Lua5.3支持整数子类型,默认情况下为64位。相同代码输出的结果:

115072593268806

默认情况下,lua5.1总是将数字存储为64位浮点值。tostring使用科学符号来打印非常大或非常小的值。你知道吗

如果使用string.format格式化数字,则可以获得所有数字:

> print(string.format("%15d", mac_int))
115072593268806

相关问题 更多 >