C++向Lua传递数组

来源:互联网 发布:淘宝买主板靠谱吗 编辑:程序博客网 时间:2024/05/14 14:27

没什么解释,直接贴代码

cnid.lua 这个不是重点

--verify cnidfunction verify_cnid(id)--校验位local verifymap = {1, 0, 88, 9, 8, 7, 6, 5, 4, 3, 2}--加权因子local factor = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}--加权和local sum = 0local index = 1while index ~= 18 do --身份证长18位sum = sum + (id[index]) * factor[index]index = index + 1end--求模11local r = sum % 11if verifymap[r + 1] ==  id[18] thenreturn trueelsereturn falseendend
luacnid.cpp

#include <cstdlib>#include <iostream>extern "C" {#include <lua.h>#include <lualib.h>#include <lauxlib.h>}typedef unsigned short wchar;//point to Lua Interpreter//lua_State *L;bool lua_verify(lua_State *L, wchar * id, int len){//get lua function namelua_getglobal(L, "verify_cnid");//get lua function parameter//create a new tablelua_newtable(L); lua_pushnumber(L, -1); //push -1 into stacklua_rawseti(L, -2, 0); //set array[0] by -1for(int i = 0; i < len; i++){lua_pushinteger(L, id[i]); //push lua_rawseti(L, -2, i+1); //}//call function, 1 parameter, 1 return valuelua_call(L, 1, 1);//get resultbool result = (bool)lua_toboolean(L, -1);lua_pop(L, 1);return result;}int main(){lua_State *L;//init LuaL = lua_open();//load Lua libsluaL_openlibs(L);//load lua fileluaL_dofile(L, "cnid.lua");//call Lua functionwchar id[] = {4,4,2,3,2,5,1,8,8,0,0,4,1,8,4,0,4,3};bool result = lua_verify(L, id, 18);std::cout << result << std::endl;//clear Lualua_close(L);return 0;}


0 0
原创粉丝点击