以字节为单位的数字格式长度是多少? 这是一种“多类型”数据格式。是4个字节吗? 8个字节?多少?我怎样才能以编程方式获得它?长度是否取决于OS /处理器类型?
这里https://www.lua.org/pil/2.3.html文档说这是双精度类型。也就是说,它有64位。我是对的吗?
答案 0 :(得分:4)
就像@Roddy说的那样,整数类型稍微复杂一点。而且,这取决于你的Lua是如何编译的。
基本上,在Lua 5.3中,有两种类型,整数类型lua_Integer
和数字类型lua_Number
。您可以通过parsing a chunk header
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