Считать двоичные данные как Lua число с FFI - PullRequest
2 голосов
/ 01 мая 2020

У меня есть файл, который я открыл в двоичном виде, как это: local dem = io.open("testdem.dem", "rb")
Я могу читать строки из него просто отлично: print(dem:read(8)) -> HL2DEMO, однако после этого есть 4-байтовый младший порядок байтов целое число и 4-байтовое число с плавающей запятой (в документах для формата файла не указывается порядок байтов, но поскольку он не указывает мало, как целое число, я должен буду считать его большим). Это не может быть прочитано с read. Я новичок в LuaJIT FFI и не знаю, как это прочитать. Честно говоря, я нахожу документацию по этому конкретному c аспекту FFI неутешительной, хотя я всего лишь lua программист и не имею большого опыта работы с C. Одна вещь, которую я попробовал, - это создание cdata, но я не думаю, что понимаю:

local dem = io.open("testdem.dem", "rb")
print(dem:read(8))
local cd = ffi.new("int", 4)
ffi.copy(cd, dem:read(4), 4)
print(tostring(cd))
--[[Output
HL2DEMO
luajit: bad argument #1 to 'copy' (cannot convert 'int' to 'void *')
]]--

Резюме:
Цель: чтение целых чисел и чисел с плавающей точкой из двоичных данных.
Ожидаемый результат: lua целое число или число с плавающей запятой, которое я могу затем преобразовать в строку.

1 Ответ

3 голосов
/ 01 мая 2020

string.unpack делает это для Lua 5.3, но есть и несколько альтернатив для LuaJIT. Например, см. этот ответ (и другие ответы на тот же вопрос).

...