什么是数字格式长度(以字节为单位)?
这是一种"多类型"数据格式。它是4个字节?8个字节?有多少?如何在程序中获取它?长度是否取决于操作系统/处理器类型?
在这里https://www.lua.org/pil/2.3.html,文档称这是双精度类型,即有64位。我是正确的吗?
在这里https://www.lua.org/pil/2.3.html,文档称这是双精度类型,即有64位。我是正确的吗?
正如@Roddy所说,整数类型稍微有些复杂。此外,这取决于您的Lua是如何编译的。
基本上,在Lua 5.3中,有两种类型,整数类型lua_Integer
和数字类型lua_Number
。您可以通过解析块头在Lua内部以编程方式获取它们的长度:
local chunk = string.dump(function() end)
print("lua_Integer", chunk:byte(16))
print("lua_Number", chunk:byte(17))
通常情况下,这两个长度都是8字节。然而,在一些嵌入式平台上,你可能会发现Lua中的lua_Number类型是float(4字节),32位整数或者更奇怪的东西。
作为一种语言,Lua 并没有定义你所询问的内容。用于表示数字的数据类型可能会因版本而异(请注意,“Programming in Lua” 免费在线版本的链接是关于 Lua 5.0 的),但主要是由 Lua 编译的方式定义的,就像其他人已经说过的那样。
请查看 {{link1: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
('%x'):format(0xffffffffffffffff)
- 乘以4可得到位宽,或除以2可得到字节宽。如果您想检查具有大于64位整数的Lua实现,甚至可以扩展ff
的数量。 - Stuart P. Bentleystring.pack
:s = string.pack("J",0)
number_of_bytes = #s
function float_bytes()
return #string.pack("J", 0)
end
function int_bytes()
return math.maxinteger == 2147483647 and 4 or math.maxinteger == 9223372036854775807 and 8 or nil
end