ulua整數溢位的BUG

2021-07-11 19:50:06 字數 862 閱讀 3687

我們在使用unity5.x開發的新遊戲《江湖x》中使用ulua做一些業務邏輯。

前期為了開發迅速,沒有使用wrap,使用的動態反射(所以很慢)。這兩天針對性優化,將lua wrap用了起來。發現乙個詭異現象:

在editor中跑得很正常的邏輯,在ios真機上整型都溢位了。

具體內容是我們在c#的乙個類中記錄了攻擊扣血(負數),傳到lua中後變成了乙個越界整數,結果直接變成給敵方加血了。。還是乙個巨大的整數,瞬間補滿,嚇死人 - -#

經過排查以後發現,使用ulua生成的wrap 類中,只要有int型別的數,就不能為負數,否則在lua那邊取出來就是乙個溢位的整數。大概搜了一下,應該是跟ulua不支援int64相關,沒有仔細研究了。

沒辦法,於是我們就做了一件很醜的事情……

public

string addhpstr}

public

string addmpstr}

public

string addballstr}

public

string addhudunstr}

在lua中這樣呼叫……

local daddhp = tonumber(br.addhpstr)

local daddmp = tonumber(br.addmpstr)

local daddball = tonumber(br.addballstr)

local daddhudun = tonumber(br.addhudunstr)

雖然很醜。。但是問題貌似暫時解決了。

不知道是否有更優雅一點的解決方案?如果有,歡迎告訴我。

整數溢位,如何判斷整數溢位

c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...

整數溢位,如何判斷整數溢位

c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...

整數溢位,如何判斷整數溢位

c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...