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

时间:2015-12-04 16:35:03

标签: python lua hex

在Python中,我有:

for (x in colnames(A)) { A[,x] <- eval( call( paste0("as.", class(B[,x])), A[,x]) )}

在Lua,我有:

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

为什么4有差异?

3 个答案:

答案 0 :(得分:2)

默认情况下,Lua 5.1始终将数字存储为64位浮点值。 ICollection<T>使用科学记数法打印非常大或小的值。

如果您使用tostring格式化数字,则可以获取所有数字:

string.format

答案 1 :(得分:1)

直到Lua版本5.2,Lua 数字类型使用浮点表示,而Python使用仅由内存绑定的实际整数。来自Lua 5.2 documentation

  

Number表示实数(双精度浮点)数。

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

>>> 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,所以升级到那个版本可能会解决这个问题。

答案 2 :(得分:1)

您可能正在使用Lua 5.2或更低版本。数字类型默认为WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("span.error.notValidEmail"))); assertEquals("Not valid email.", driver.findElement(By.cssSelector("span.error.notValidEmail")).getText()); ,以C语言输入。double的默认格式没有足够的精确度。

Lua 5.3支持整数子类型,默认为64位。相同代码输出的结果:

print