CBitBuffer 类 - MQL5 中的数据序列化 - MetaTrader 5 库

CBitBuffer 类为 MQL5 中的位级数据序列化提供了坚实的基础,提供对数据存储和检索的细粒度控制。该类支持各种数据类型,包括可变长度整数(带有 ZigZag 编码的 VLQ)以及字符串和结构的序列化,这对于优化空间非常有用。该类采用内部缓冲和指数数组增长等优化来增强性能并提供全面的错误处理系统。它对于网络通信或文件存储特别有用,其中最小化数据大小至关重要(例如,压缩刻度数据)。

//+------------------------------------------------------------------+ //| CBitBuffer 类 | //|将各个位或位序列读/写到 ulong[] 缓冲区。 | //|支持高效的位操作和混合读/写操作。 | //+------------------------------------------------------------------+ 班级CBit缓冲区 {民众:// 核心位操作 布尔值 写入位(布尔值少量); // 写入一位 布尔值 写入位(乌龙价值,整数位数);// 从 ulong 写入 N 位 布尔值 读取位(); // 读取一位 乌龙 读取位(整数位数); // 将 N 位读取为 ulong 乌龙 窥视比特(整数位数); // 读取 N 位而不前进位置 民众:// 位置和大小管理 布尔值 设置读取位置(长的位位置); // 设置读取位置(以位为单位) 长的 获取读取位置(); 布尔值 重置读取位置(); // 将读取位置重置为 0 布尔值 跳过位(长的跳过位); // 从当前读取位置跳过 N 位 长的 获取总WrittenBits(); // 写入的总位数 长的 获取写入的总字节数(); // 写入的总字节数 长的 获取分配的总字节数(); // 分配的总字节数 长的 获取剩余读取位(); // 剩余要读取的位 民众:// 数据类型特定的读/写操作 布尔值 写布尔(布尔值价值); 布尔值 写字符(字符价值); 布尔值 写入UChar(乌查尔价值); 布尔值 写短(短的价值); 布尔值 写UShort(超短价值); 布尔值 写入整数(整数价值); 布尔值 写入UInt(单位价值); 布尔值 写长(长的价值); 布尔值 写入ULong(乌龙价值); 布尔值 写入日期时间(日期时间价值); 布尔值 写浮点(漂浮价值); // 写入一个32位浮点数 布尔值 写双(双倍的价值); // 写入 64 位双精度数 布尔值 写入字符串(细绳价值); // 写入带有长度前缀的字符串 模板<类型名> 布尔值 WriteStruct(T &struct_object); // 写入带有长度前缀的结构体 布尔值 ReadBool(); 字符 ReadChar(); 乌查尔 ReadUChar(); 短的 ReadShort(); 超短 ReadUShort(); 整数 ReadInt(); 单位 ReadUInt(); 长的 读长(); 乌龙 ReadULong(); 日期时间 读取日期时间(); 漂浮 ReadFloat(); // 读取32位浮点数 双倍的 ReadDouble(); // 读取 64 位双精度数 细绳 读取字符串(); // 读取带长度前缀的字符串 模板<类型名> T ReadStruct(); // 读取带有长度前缀的结构体 民众:// 整数的可变长度编码 (VLQ) 布尔值 WriteVarInt(整数价值); // 使用 ZigZag + VLQ 写入有符号 int 布尔值 WriteVarUInt(单位价值); // 使用 VLQ 写入 unsigned int 布尔值 写VarLong(长的价值); // 使用 ZigZag + VLQ 写入有符号长整型 布尔值 写入VarULong(乌龙价值); // 使用 VLQ 写入 unsigned long 整数 ReadVarInt(); // 使用 ZigZag + VLQ 读取有符号 int 单位 ReadVarUInt(); // 使用 VLQ 读取 unsigned int 长的 ReadVarLong(); // 使用 ZigZag + VLQ 读取有符号长整型 乌龙 ReadVarULong(); // 使用 VLQ 读取 unsigned long 民众:// 缓冲区管理 空白 清除(); // 清除缓冲区内容并重置状态 布尔值 获取最终缓冲区(乌龙&destinationArray[]);// 将缓冲区内容复制到数组 布尔值 设置原始缓冲区(常量 乌龙&源缓冲区[]); // 从数组中设置缓冲区内容 布尔值 节省(细绳文件名); // 将缓冲区保存到文件 布尔值 加载(细绳文件名); // 从文件加载缓冲区 民众:// 错误处理 ENUM_BIT_BUFFER_ERROR获取最后一个错误(); // 返回最后一个错误代码 细绳 获取最后一个错误字符串(); // 返回错误描述字符串 空白 清除最后一个错误(); // 清除最后一个错误 空白 打印十六进制(); // 以十六进制打印主缓冲区(调试) };
完整的测试示例 ”CBitBuffer_Test.mq5" 上面提供的是检测错误和验证类功能的最佳方法。
头文件“短报价.mqh" 提供了 ' 的替代实现短蜱' fxsaber 的勾选压缩库,利用“CBitBuffer”类中的 VLQ 编码。
2025.07.21 - v.1.01:
2025.07.22 - v.1.02:
附件下载
📎 CBitBuffer.mqh (95.3 KB)
📎 CBitBuffer_Test.mq5 (39.12 KB)
📎 TicksShort.mqh (14.12 KB)
📎 TicksShort_SaveLoad.mq5 (2 KB)
📎 TicksShort_Performance.mq5 (4.69 KB)
📎 TicksShortLite.mqh (17.16 KB)
Source: MQL5 #61728
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录
