以字節爲單位的數字格式長度是多少? 這是一種「多種」數據格式。它是4字節嗎? 8字節?多少?我怎樣才能以編程方式獲得它?長度是否取決於操作系統/處理器類型?什麼是以字節爲單位的Lua數字類型長度?
這裏https://www.lua.org/pil/2.3.html該文檔說這是一個雙精度類型。也就是說,它有64位。我對嗎?
以字節爲單位的數字格式長度是多少? 這是一種「多種」數據格式。它是4字節嗎? 8字節?多少?我怎樣才能以編程方式獲得它?長度是否取決於操作系統/處理器類型?什麼是以字節爲單位的Lua數字類型長度?
這裏https://www.lua.org/pil/2.3.html該文檔說這是一個雙精度類型。也就是說,它有64位。我對嗎?
這取決於Lua的版本,當然,它是如何編譯的。
5.3具有真正的整數,通常是64位。 https://www.lua.org/manual/5.3/manual.html
類型數使用兩個內部表示,或兩種亞型, 一個稱爲整數,而另一個稱爲浮動。
...
標準Lua使用64位整數和雙精度(64位) 花車,但你也可以編譯的Lua,以便它使用32位整數 和/或單精度(32位)浮點數。
早期版本總是使用64位雙精度浮點,它有效精確地表示多達52位整數。您的鏈接... https://www.lua.org/pil/2.3.html
根據lua的參考(對於整數)
在整數溢出的情況下,所有的操作環繞,根據雙補碼運算的通常規則。 (換句話說,它們返回的唯一的可表示整數,其等於模2^64至數學結果。)
和用於浮點
隨着冪的異常並漂浮劃分,算術運算符的工作方式如下:如果兩個操作數都是整數,則操作是通過整數執行的,結果是一個整數。否則,如果兩個操作數都是可以轉換爲數字的數字或字符串(請參閱第3.4.3節),那麼它們將轉換爲浮點數,操作按照通常的浮點算法規則執行(通常是IEEE 754標準) ,結果是浮動。
就像@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位整數甚至更奇怪的東西。
請注意,這隻適用於PUC-rio lua。它不適用於例如luajit – daurnimator
@daurnimator是的,此外,塊頭格式取決於Lua的版本,所以這隻適用於5.3。如果你需要支持更多的Luas,你需要首先檢查版本併爲其中的每一個實現特定的代碼。 – catwell
Lua作爲一種語言並沒有定義你所要求的。用於表示數字的數據類型可能因版本不同而不同(請注意,免費的在線版本「Lua編程」鏈接大約是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
什麼關係呢?你有什麼真正的問題?你想在Lua還是C中獲得它? –
我想將十六進制字符串轉換爲數字。我想知道字符串的最大長度。 – Vyacheslav
@Vyacheslav因此,實際上是迂腐你是在位整數精度之後,沒有數字類型的字節大小。 :) – unwind