十六进制转换中 Lua 和 Python 的区别
Difference between Lua and Python in hex conversion
在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?
直到 Lua 版本 5.2,Lua number 类型使用浮点表示,而 Python 使用实际整数只受记忆的束缚。来自 Lua 5.2 documentation:
Number represents real (double-precision floating-point) numbers.
请注意,该数字仍然足够精确,但为了显示四舍五入。如果将生成的整数转换为 Python 中的浮点数(也使用双精度浮点数),您可以看到相同的数字:
>>> float(115072593268806)
115072593268806.0
>>> '{:.13e}'.format(float(115072593268806))
'1.1507259326881e+14'
第二行的格式与 Lua 相同;小数点后13位,采用科学计数法。
您可以告诉 Lua 使用不同的格式打印数字 string.format
:
print(string.format("%d", mac_int))
我看到 Lua 5.3 expanded the number type to support 64-bit integers,所以也许升级到那个版本可以解决这个问题。
Lua 5.1,默认情况下,始终将数字存储为 64 位浮点值。 tostring
使用科学计数法打印非常大或非常小的值。
如果用string.format
格式化数字,可以得到所有数字:
> print(string.format("%15d", mac_int))
115072593268806
您可能正在使用 Lua 5.2 或更低版本。数字类型在C中默认为double
类型。print
的默认格式精度不够。
Lua 5.3支持整数子类型,默认为64位。相同代码输出结果:
115072593268806
在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?
直到 Lua 版本 5.2,Lua number 类型使用浮点表示,而 Python 使用实际整数只受记忆的束缚。来自 Lua 5.2 documentation:
Number represents real (double-precision floating-point) numbers.
请注意,该数字仍然足够精确,但为了显示四舍五入。如果将生成的整数转换为 Python 中的浮点数(也使用双精度浮点数),您可以看到相同的数字:
>>> float(115072593268806)
115072593268806.0
>>> '{:.13e}'.format(float(115072593268806))
'1.1507259326881e+14'
第二行的格式与 Lua 相同;小数点后13位,采用科学计数法。
您可以告诉 Lua 使用不同的格式打印数字 string.format
:
print(string.format("%d", mac_int))
我看到 Lua 5.3 expanded the number type to support 64-bit integers,所以也许升级到那个版本可以解决这个问题。
Lua 5.1,默认情况下,始终将数字存储为 64 位浮点值。 tostring
使用科学计数法打印非常大或非常小的值。
如果用string.format
格式化数字,可以得到所有数字:
> print(string.format("%15d", mac_int))
115072593268806
您可能正在使用 Lua 5.2 或更低版本。数字类型在C中默认为double
类型。print
的默认格式精度不够。
Lua 5.3支持整数子类型,默认为64位。相同代码输出结果:
115072593268806