2017-02-15 4 views
3

Я пытаюсь передать массив байтов от C до lua. Если передать его как строку, я не могу передавать массивы, содержащие «0x00» (потому что он интерпретируется как конец строки). Вот что я писал до сих пор:Передача байтового массива от C до Lua

C:

uchar hash[32]; 
memset(hash, 0, 32); 

sha256_final(ctx, hash); 
lua_pushstring(L, (const char*)hash); 
return 1; 

Lua:

local hash_str = shaFunctions.final(ctx) 
local hash = {} 
hash_str:gsub(".",function(c) table.insert(hash,string.byte(c)) end) 

Есть ли лучший способ для передачи массива байтов от С до Lua? Thanks

+0

Использование 'lua_pushlstring' –

ответ

3

Вы можете использовать функцию lua_pushlstring().

Это прототип:

void lua_pushlstring (lua_State *L, const char *s, size_t len); 

и ваш код будет выглядеть следующим образом:

uchar hash[32]; 
memset(hash, 0, 32); 

sha256_final(ctx, hash); 
lua_pushlstring(L, (const char*)hash, 32); 
return 1; 
+0

Это работает! спасибо – Ofa