在提出任何问题之前:我正在处理实际的硬件。
我正在寻找一种元语言,它允许我指定数据结构内容,其中字段具有不同的位长(这包括像 1、3 或 24 或 48 位长的字段),关于字节序,并会生成 C++ 代码访问数据。
这个问题因为太模糊而被搁置,所以我会尽量说清楚:
我正在寻找一种语言:
- 接受简单的结构描述并生成有用的 C++ 代码,
- 将允许精确指定从 1 位到多个(最多 8 个)字节长的整数以及数据(通常是字符串),
- 将使我不再需要转换字节顺序,
- 产生准确的、可预测的输出,不会带来开销(如在协议缓冲区中)
ASN.1 听起来几乎可以达到目的,但它增加了自己的开销(意思是,我不能生成一个简单的结构,将 2 个字节分成 4 个半字节)——我正在寻找的是一种能够提供精确表示的语言结构。
例如,我想抽象一下:
struct Command {
struct Record {
int8_t track;
int8_t point;
int8_t index;
int16_t start_position; // big endian, misaligned
int32_t length; // big endian, misaligned;
} __attribute__((packed)); // structure length = 11 bytes.
int8_t current : 1;
int8_t command : 7;
int8_t reserved;
int16_t side : 3; // entire int16_t needs to be
int16_t layer : 3; // converted from big endian, because
int16_t laser_mark : 3; // this field spans across bytes.
int16_t laser_power : 3;
int16_t reserved_pad : 2;
int16_t laser_tag : 2;
int32_t mode_number : 8; // again, entire 32 bit field needs to be converted
int32_t record_count : 24; // from big endian to read this count properly.
Record records[];
} __attribute__((packed));
以上需要精确打包到携带8 + record_count * 11
字节的结构中,全部准确形成,没有额外的数据,没有额外的位或字节集。
以上只是一个例子。它变得简单,这样我就不会用通常有数百个字段的实际结构阻塞站点。它已被简化,但显示了许多我期待看到的特性(剩下的两个特性是 48 或 64 位整数和纯数据 (bytes[]))
如果这个问题仍然太模糊,请解释我应该在评论中添加什么。谢谢!