C风格的缓冲区#
基本信息#
起草日期: 2021-03-24
设计人员: wendal
有什么用途#
直接指向一块内存区域,提供一系列API操作这块内存
拼接待发送的数据, 部分替代pack库
作为FrameBuffer,在显示框架中充当显示缓冲区
设计思路和边界#
Lua API#
使用示例
-- 创建zbuff
local buff = zbuff.create(1024) -- 空白的
-- local buff = zbuff.create(1024, "123321456654") -- 创建,并填充一个已有字符串的内容
-- 类file的读写操作
buff:write("123") -- 写入数据, 指针相应地往后移动
buff:seek(0, zbuff.SEEK_SET) -- 把指针设置到指定位置
local str = buff:read(3) -- 把刚才那3个字节读出来,内容是字符串,指针也往后移动了
-- 按数据类型读写
local n = buff:readInt8() -- 支持int8~int64,uint8~uint32,float32,double64
-- buff:writeInt8(0x32) -- 同时也支持写入上述整型/浮点数
-- 支持pack/unpack操作
local _, a, b, c = buff:unpack("IIH") -- 支持unpack解码
-- buff:pack("IIH", 0x1234, 0x4567, 0x12) -- 也支持pack打包
log.info("buff", str, n)
-- 类数组操作
buff:seek(0, zbuff.SEEK_SET) -- 又回到开头
local b = buff[2] -- 直接按数组来读取, 得到ASCII码, 0x32, 注意,这里按C的标准来
buff[3] = 0x33 -- 直接赋值可还行
-- FrameBuffer操作
buff:asFB(128, 240, 16) -- 宽,高,色深
buff:drawLine(1, 2, 1, 20, 0x21) -- 画线操作
buff:drawRect(20, 40, 40, 40) -- 画矩形
buff:setPix(1, 2, 0x01) -- 设置具体像素值
buff:drawStr(20, 40, "中文也ok") -- 写字
buff:clear() -- 清空,全部填0
-- 取出缓冲区的内容, 返回值是string
buff:str() -- 默认是0 ~ limit/len 从头到limit值或者到尾部
buff:str(2, 12) -- 取出特定偏移量和长度
相关知识点#
Luat核心机制