2016-12-29 92 views
3

嗨,我試圖訪問從Lua發送嵌套表C. 表是:訪問嵌套表來獲取值

arg = 
{ 
    MagicNumber = {MagicNumber, 0},  
    ProdNum = {ProdNum, 1}, 
    LetterR = {LetterR,  0xc}, 
    Revision = {Revision, 0xd}, 
    Space1 = {Space1,  0xe}, 
    MnfctrCode = {MnfctrCode, 0xf}, 
    Hyphen1 = {Hyphen1,  0x12}, 
    ZeroCode = {ZeroCode, 0x13},  
    Hyphen2 = {Hyphen2,  0x15}, 
    MnfctrMnth = {MnfctrMnth, 0x16}, 
    MnfctrYear = {MnfctrYear, 0x18}, 
    SerialNum = {SerialNum, 0x1a}, 
    Space2 = {Space2,  0x1e}, 
    ChkSum = {ChkSum,  0x1f}, 
} 

表裏面都是整數值,和表中的鍵是一個字符串。我的代碼片段是ollows:

lua_pushnil(L); 

while(lua_next(L, -2) != 0) 
{ 
    field = lua_tostring(L, -2); 
    printf("\n %d field = %s", i, field); 
    wrData[i-1] = lua_tonumber(L,-1); 
    printf("\n data = 0x%x", wrData[i-1]); 
    lua_pop(L, -1); 
    i++; 
} 

我錯過了什麼,因爲我值得到的回覆是0x0

+1

'lua_tonumber(L,-1)'是錯誤的,因爲你在索引'-1'有一個表,而不是一個號碼(這些都是從鍵 - 值對從'arg'表中的值) –

+1

' lua_pop(L,-1)'是錯誤的:它需要彈出的時隙數量,而不是它們的位置。 – lhf

+1

感謝您的答案,我從這裏得到了答案:http://stackoverflow.com/questions/27037854/lua-c-read-nested-tables – SanR

回答

1

改變此函數以適合您的需要,並用堆棧頂部的表調用它。

void luaAccess(lua_State * L)// call this function with the table on the top of the stack 
    { 
     lua_pushnil(L); 
     while(lua_next(L, -2)) 
     { 
      switch(lua_type(L, -2)) 
      { 
       case LUA_TSTRING: 
        //deal with the outer table index here 
       break; 
       //... 
       // deal with aditional index types here 
      } 
      switch(lua_type(L, -1)) 
      { 
       case LUA_TTABLE: 
        lua_pushnil(L); 
        while (lua_next) 
        { 
         switch(lua_type(L, -2)) 
         { 
          case LUA_TNUMBER: 
           // deal with the inner table index here 
          break; 
          //... 
          // deal with aditional index types here 
         } 
         switch(lua_type(L, -1)) 
         { 
          case LUA_TSTRING: 
           //deal with strings 
          break; 
          case LUA_TNUMBER 
           //deal with numbers 
          break; 
         } 
         lua_pop(L, 1); 
        } 
       //... 
       // deal with aditional index types here 
       break 
      } 
     } 
     lua_pop(L, 1); 
    } 
+0

非常感謝!這工作! – SanR

+0

@SanjanaRakhecha然後請接受答案 –