bit_iterator_t
在 LittlevGL (LVGL) 的二进制字体加载器中,bit_iterator_t
结构体用于提供一个位级的迭代器,以便能够按位读取字体文件中的数据。这种类型的迭代器特别有用于解析那些不是以字节对齐的数据,比如某些压缩的或位打包的数据格式。
结构体定义
typedef struct {
lv_fs_file_t * fp; // 文件指针,用于读取字体数据
int8_t bit_pos; // 当前位的位置(从0开始,到7结束)
uint8_t byte_value; // 当前字节的值
} bit_iterator_t;
成员变量解析
-
lv_fs_file_t * fp
:- 这是一个指向
lv_fs_file_t
的指针,它是 LVGL 文件系统抽象的一部分,代表了打开的字体文件。 - 通过这个文件指针,
bit_iterator_t
可以读取文件中的字节数据。
- 这是一个指向
-
int8_t bit_pos
:- 这是一个8位有符号整数,用于跟踪当前正在处理的位的位置。
bit_pos
的值从-1
开始,表示当前没有处于字节中的特定位上。在读取第一个字节后,bit_pos
会设置为7
,然后每次读取一个位后递减。- 当
bit_pos
达到-1
时,表示需要从文件中读取下一个字节。
-
uint8_t byte_value
:- 这是一个8位无符号整数,存储着当前正在处理的字节的值。
- 每次从文件中读取一个新的字节时,这个值会被更新。
- 通过位操作,可以逐位地从
byte_value
中提取信息。
使用场景
bit_iterator_t
结构体通常与 read_bits
函数一起使用,该函数使用 bit_iterator_t
来按位读取字体文件中的特定数据。这对于读取如字形宽度、偏移量、高度等位字段数据非常有用。
示例
bit_iterator_t it = init_bit_iterator(fp); // 初始化位迭代器
unsigned int value = read_bit