luajit ffi 使用

结构定义

首先需要使用ffi.cdef定义需要的结构体,如下:

ffi.cdef[[
    #pragma pack(1)
    typedef struct point{
        int x;
        int y;
        char  text[128];
    }point_t;
    #pragma pack()
]];

Lua中创建结构对象

使用ffi.new创建新的结构对象

cdata = ffi.new(ct,   [init])

如初始化一个point_t对象

local p1 = ffi.new('point_t', {x=10, y=20, text='first point'});

访问结构成员

直接使用.操作符即可。如p1.x,p1.y等。

如果是字符串的话,需要使用字符串转换函数

  ffi.string(ptr,  [ len])

带长度是内存拷贝,不带长度是自动以\0结束。

转换成内存块

  1. 先转换成void指针 pdata = ffi.cast('void', p1)
  2. 在转换成lua string, ffi.string(pdata, ffi.sizeof(p1))

从内存块转换成

  local p = ffi.cast('point_t *', st)

转换的结果是一个指针对象

数组处理

原型

local p =  ffi.new('ct[?]', length, [init..])

分配字符串数组

  local p = ffi.new('char[?]', 1000)

数组的访问下标需要从0开始

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,630评论 0 17
  • 《废都》不愧是大陆禁书,果真黄的可以,看了一小点的时候几乎要放弃,看到十分之一的时候才真正发觉,这并不是一本轻浮的...
    茱萸_阅读 11,245评论 2 0
  • 凌晨一点多,A在朋友圈里放了一张照片,照片中她坐在书桌前努力备考,桌子上摊满了书籍和资料,并配文字:相信努力一定会...
    未末小七阅读 1,033评论 1 4
  • 天下皆知美之為美,斯惡已。皆知善之為善,斯不善已。有無相生,難易相成,長短相形,高下相盈,音聲相和,前後相隨。恆也...
    景景相依阅读 342评论 0 1