Байты в C структуру

Tema05

Известный
Автор темы
1,513
480
Версия MoonLoader
.026-beta
Например у меня есть структура
Lua:
ffi.cdef [[
    typedef struct {
        int param1;
        int param2;
        int param3;
    } my_data;
]]
И есть набор байт в виде строки FFFFFFFF0000000099999999
Как мне создать переменную с структурой и поместить туда эти байты? Соответственно, чтобы можно было получить нужные данные. Т.е.
Lua:
print(var_with_struct.param1) -- 0xFFFFFFFF
print(var_with_struct.param2) -- 0x00000000
print(var_with_struct.param3) -- 0x99999999

Да это можно сделать через ffi.new. Но там нужно через запятую указывать параметры
Lua:
ffi.new("my_struct*", tonumber(bytes:sub(1, 8), 16), tonumber(bytes:sub(9, 16), 16), tonumber(bytes:sub(17, 24), 16))
Это мне не подходит так как я как раз хочу избежать моменты выделения значений при помощи структуры.
 
Последнее редактирование:

whyega52

Eblang головного мозга
Модератор
2,863
2,839
Если эти байты хранятся в ASCII символах, то ты можешь при помощи WinAPI инициализировать память, записать туда байты и закастовать всё это в структуру. Пример реализации инициализации и каста можешь глянуть в примере, где я рассказываю про Bitstream
 

Tema05

Известный
Автор темы
1,513
480
Если эти байты хранятся в ASCII символах, то ты можешь при помощи WinAPI инициализировать память, записать туда байты и закастовать всё это в структуру. Пример реализации инициализации и каста можешь глянуть в примере, где я рассказываю про Bitstream
Именно то что мне нужно. Я 1 делом подумал о касте, но хз как получить адрес строки луашной. И да у меня байты идут в символах, в примере я так написал для упрощения.
 

whyega52

Eblang головного мозга
Модератор
2,863
2,839
Можешь сразу указать что это за функция из winapi?
malloc
как получить адрес строки луашной
Это всё тот же char, можешь закастовать строку к uintptr через ффи и получишь её адрес
идут в символах
Тогда в любом случае придётся куда-то перезаписывать эту строку, либо же хранить в строке заранее прописанные символы, которые соответствуют нужным тебе байты
 

Tema05

Известный
Автор темы
1,513
480
malloc

Это всё тот же char, можешь закастовать строку к uintptr через ффи и получишь её адрес

Тогда в любом случае придётся куда-то перезаписывать эту строку, либо же хранить в строке заранее прописанные символы, которые соответствуют нужным тебе байты
А что если у меня в структуре будет поле с указателем на другую структуру? Или массив чаров (строка)?
 

whyega52

Eblang головного мозга
Модератор
2,863
2,839
А что если у меня в структуре будет поле с указателем на другую структуру
указатель - 4 байта, те 4 байта, которые находятся на нужном оффсете в структуре и будут этим самым указателем