--- title: cdata - C-значения и FFI summary: Дополнительный тип LuaJIT для указателей, структур и C-чисел. ffi.string копирует C-строку в Lua string; ffi.cast меняет представление типа, но не доказывает валидность адреса. Срок жизни памяти нужно устанавливать отдельно. section: reference kind: guide status: reference updated: 2026-10-26 tags: ["API","X4"] sources: ["https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/","https://www.lua.org/manual/5.1/manual.html","https://luajit.org/ext_ffi_api.html"] --- ## Значение Дополнительный тип LuaJIT для указателей, структур и C-чисел. ffi.string копирует C-строку в Lua string; ffi.cast меняет представление типа, но не доказывает валидность адреса. Срок жизни памяти нужно устанавливать отдельно. ## Пример ```lua local ffi = require("ffi") local value = ffi.new("uint64_t", 42) local kind = type(value) -- cdata local bytes = ffi.sizeof(value) ``` **Что произойдёт:** value содержит uint64_t со значением 42; kind = "cdata"; bytes = 8. Этот фрагмент не печатает сообщение и не пишет его в журнал. Здесь указаны ожидаемые значения примера. ## Методы и связанные вызовы | Функция | Возвращает | Назначение | | --- | --- | --- | | [ffi.cast](wiki:api-standard-ffi-cast-ae33ac09) | [`cdata`](wiki:type-cdata) | Создаёт скалярное cdata заданного C-типа через преобразование. Валидность адреса этим не проверяется. | | [ffi.cdef](wiki:api-standard-ffi-cdef-a564999c) | [`none`](wiki:type-results) | Объявляет C-типы и сигнатуры для FFI. Это не загрузка библиотеки и не реализация функции. | | [ffi.copy](wiki:api-standard-ffi-copy-aa0e2705) | [`none`](wiki:type-results) | Копирует байты в подготовленный буфер. Без длины допустима строка Lua: копируется также нулевой терминатор. | | [ffi.new](wiki:api-standard-ffi-new-86273c2d) | [`cdata`](wiki:type-cdata) | Выделяет и инициализирует cdata. Размер обязателен только для массивов или структур переменной длины. | | [ffi.sizeof](wiki:api-standard-ffi-sizeof-18d93d2f) | [`number`](wiki:type-number) \| [`nil`](wiki:type-nil) | Возвращает размер C-типа или cdata в байтах; размер неизвестного типа может быть nil. | | [ffi.string](wiki:api-standard-ffi-string-4edf893f) | [`string`](wiki:type-string) | Копирует данные C-указателя в строку Lua. Без длины читает до нулевого байта. |