展示了ToLua新增Int64类的使用方法。
「1」代码
操作代码如下:
function TestInt64(x)
x = 789 + x
assert(tostring(x) == '9223372036854775807')
local low, high = int64.tonum2(x)
print('x value is: '..tostring(x)..' low is: '.. low .. ' high is: '..high.. ' type is: '.. tolua.typename(x))
local y = int64.new(1,2)
local z = int64.new(1,2)
if y == z then
print('int64 equals is ok, value: '..int64.tostring(y))
end
x = int64.new(123)
if int64.equals(x, 123) then
print('int64 equals to number ok')
else
print('int64 equals to number failed')
end
x = int64.new('78962871035984074')
print('int64 is: '..tostring(x))
local str = tostring(int64.new(3605690779, 30459971))
local n2 = int64.new(str)
local l, h = int64.tonum2(n2)
print(str..':'..tostring(n2)..' low:'..l..' high:'..h)
print('----------------------------uint64-----------------------------')
x = uint64.new('18446744073709551615')
print('uint64 max is: '..tostring(x))
l, h = uint64.tonum2(x)
str = tostring(uint64.new(l, h))
print(str..':'..tostring(x)..' low:'..l..' high:'..h)
return y
end
c#代码如下:
new LuaResLoader();
LuaState lua = new LuaState();
lua.Start();
lua.DoString(script, "TestInt64.cs");
LuaFunction func = lua.GetFunction("TestInt64");
func.BeginPCall();
func.Push(9223372036854775807 - 789);
func.PCall();
long n64 = func.CheckLong();
Debugger.Log("int64 return from lua is: {0}", n64);
func.EndPCall();
func.Dispose();
func = null;
lua.CheckTop();
lua.Dispose();
lua = null;
「2」需要了解的部分
- 在Lua代码中,以
local low, high = int64.tonum2(x)
的方式来获取高位和低位。 - 在Lua中:
x = integrate4.new(123)
与y = integrate4.new('12345678987654321')
创建的值与括号里的值一样。可以用 int64.equals(x, 123)验证, 也可以用 == 来比较两个很大的Int64数。 -
local y = int64.new(1,2)
的值很大,可以用tostring(y)表示。
网友评论