我认为您不会找到与您正在查看的自定义协议相匹配的易于使用的序列化程序。但看起来你拥有的一组原语(int,bool + size)足够简单,可以编写你自己的解码器/编码器。只需根据收到的消息生成 C/C++ 代码。生成具有此类描述的可编译代码应该是相当简单的任务。它应该是在编译时完成的自动生成——类似于 protobuf/Corba 正在做的事情。
示例:来自规范:
class Message{
int msg_num : 7
int dest_addr : 4
bool SRR : 1
bool IDE : 1
int source_addr : 6
//... and so on...
}
转换器可以编写一个函数,其主体类似于(抽象符号并假设 MSB):
解码器:
m = new Message()
{
long long val = 0
for(int i=0; i<7; i++) {
val <<= 8
val += nextByte()
}
m.msg_num = val
}
{
long long val = 0
for(int i=0; i<4; i++) {
val <<= 8
val += nextByte()
}
m.dest_addr = val
}
{
int val = nextByte()
m.SRR = val
}
{
int val = nextByte()
m.IDE = val
}
{
long long val = 0
for(int i=0; i<6; i++) {
val <<= 8
val += nextByte()
}
m.source_addr = val
}
// and so on
编码器:
{
long long val = m.msg_num
for(int i=0;i<7;i++) {
writeByte(val & 0xFF)
val >>= 8
}
}
{
long long val = m.dest_addr
for(int i=0;i<4;i++) {
writeByte(val & 0xFF)
val >>= 8
}
}
....
这应该很容易生成,并且是确保编码是自定义的最简单方法。