什么是Lua数字类型长度(以字节为单位)?

时间:2016-05-04 10:42:06

标签: lua

以字节为单位的数字格式长度是多少? 这是一种“多类型”数据格式。是4个字节吗? 8个字节?多少?我怎样才能以编程方式获得它?长度是否取决于OS /处理器类型?

这里https://www.lua.org/pil/2.3.html文档说这是双精度类型。也就是说,它有64位。我是对的吗?

5 个答案:

答案 0 :(得分:4)

就像@Roddy说的那样,整数类型稍微复杂一点。而且,这取决于你的Lua是如何编译的。

基本上,在Lua 5.3中,有两种类型,整数类型lua_Integer和数字类型lua_Number。您可以通过parsing a chunk header

从Lua内部以编程方式获取它们的长度
local chunk = string.dump(function() end)
print("lua_Integer", chunk:byte(16))
print("lua_Number", chunk:byte(17))

通常两个长度都是8个字节。但是在某些嵌入式平台上你可以找到Luas,其中lua_Number类型是一个浮点数(4个字节),一个32位整数甚至更奇怪的东西。

答案 1 :(得分:3)

根据Lua引用(对于整数)

  

如果在整数运算中出现溢出,则根据二补码算法的通常规则,所有运算都会回绕。 (换句话说,它们返回与数学结果模数相等的唯一可表示整数。)

和浮点

  

除了取幂和浮点除法之外,算术运算符的工作方式如下:如果两个操作数都是整数,则操作在整数上执行,结果为整数。否则,如果两个操作数都是可以转换为数字的数字或字符串(参见§3.4.3),那么它们将转换为浮点数,操作按照通常的浮点运算规则(通常是IEEE 754标准)执行,结果是浮动。

答案 2 :(得分:3)

这取决于Lua的版本,当然还有它是如何编译的。

5.3具有真整数,通常为64位。 https://www.lua.org/manual/5.3/manual.html

  

类型编号使用两个内部表示或两个子类型,   一个叫做整数,另一个叫做float。

     

...

     

标准Lua使用64位整数和双精度(64位)   浮点数,但您也可以编译Lua,以便它使用32位整数   和/或单精度(32位)浮点数。

早期版本始终使用64位双精度浮点,有效精确地表示最多52位整数。您的链接... https://www.lua.org/pil/2.3.html

答案 3 :(得分:0)

Lua作为一种语言并未定义您的要求。用于表示数字的数据类型可能因版本而异(请注意,免费在线版本的链接#34; Lua&#34中的编程;关于Lua 5.0),但主要是Lua的定义方式。正如其他人已经说过的那样编译。

查看luaconf.h了解所有细节。

关于您的实际问题(将十六进制字符串转换为数字),您可以查看各种输入字符串上tonumber()的结果,与已知结果进行比较:

function hexConvertibeBytes()
    local i, s = 0, ''
    repeat
        i, s = i + 1, s .. 'FF'
        local n = tonumber( s, 16 )
    until n ~= 256^i - 1
    return i - 1
end

答案 4 :(得分:-1)

我们可以使用 string.pack 如下:

s = string.pack("J",0)
number_of_bytes = #s