2016-05-04 46 views
3

以字節爲單位的數字格式長度是多少? 這是一種「多種」數據格式。它是4字節嗎? 8字節?多少?我怎樣才能以編程方式獲得它?長度是否取決於操作系統/處理器類型?什麼是以字節爲單位的Lua數字類型長度?

這裏https://www.lua.org/pil/2.3.html該文檔說這是一個雙精度類型。也就是說,它有64位。我對嗎?

+0

什麼關係呢?你有什麼真正的問題?你想在Lua還是C中獲得它? –

+0

我想將十六進制字符串轉換爲數字。我想知道字符串的最大長度。 – Vyacheslav

+0

@Vyacheslav因此,實際上是迂腐你是在位整數精度之後,沒有數字類型的字節大小。 :) – unwind

回答

3

這取決於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

3

根據lua的參考(對於整數)

在整數溢出的情況下,所有的操作環繞,根據雙補碼運算的通常規則。 (換句話說,它們返回的唯一的可表示整數,其等於模2^64至數學結果。)

和用於浮點

隨着冪的異常並漂浮劃分,算術運算符的工作方式如下:如果兩個操作數都是整數,則操作是通過整數執行的,結果是一個整數。否則,如果兩個操作數都是可以轉換爲數字的數字或字符串(請參閱第3.4.3節),那麼它們將轉換爲浮點數,操作按照通常的浮點算法規則執行(通常是IEEE 754標準) ,結果是浮動。

3

就像@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

請注意,這隻適用於PUC-rio lua。它不適用於例如luajit – daurnimator

+0

@daurnimator是的,此外,塊頭格式取決於Lua的版本,所以這隻適用於5.3。如果你需要支持更多的Luas,你需要首先檢查版本併爲其中的每一個實現特定的代碼。 – catwell

0

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 
相關問題