我一直在研究旨在以 C 语言实现并分别以 C 风格定义的网络协议规范,例如:
struct some_header {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t id; /
};
struct some_struct {
struct some_header header;
uint8_t field1;
uint8_t pad[3]; /* Pad to 32 bits */
uint32_t field2;
};
规范中定义了大约数百个类似“some_struct”的结构。
现在的目标是复制 C# 中的定义并围绕这些结构增加一些功能。
假设将它们表示为对象会很好,那么在 C# 中使用什么来表示上面示例中的结构的最佳原语是什么?
使用 unsafe 子句复制类似 C 的定义,然后在每个结构周围使用类包装器
使用 StructLayout 属性来指导托管结构内的布局,并为每个此类结构使用包装类
使用成熟的课程,并且只使用内存或网络流进行有线表示
除了托管 c++ 之外,还有其他想法吗?
其次,显然任务本身是非常劳动密集型的,并且在列出的任何情况下都容易出错。是否有任何自动化可以帮助将 C 标头转换为上述解决方案之一?请问有人可以推荐一个吗?
UPD。
一些图纸可以更好地描述问题。
(BoxA) --- 通过 TCP/IP 运行的有线协议 --- (BoxB)
假设 BoxA 运行一些用纯 C 编写的代码,BoxB 应该运行用 C# 编写的代码。
有线协议代表了这个庞大的规范,它有 100 多种结构来通信 BoxA 和 BoxB。如果协议是用 Google Protocol Buffers 或 Apache Thrift 定义的,那可能会容易得多,但不幸的是,我正在处理按原样定义的标准。