我不得不將接口我的代碼與來自我無法控制的應用程序的一些二進制協議。到目前爲止,我已經從數據寫入手工解析,如:用C++解析二進制協議的好庫
char *data = ...
MovementPacket pkt;
pkt.x = data[0] | data[1] << 8;
pkt.y = data[2] | data[3] << 8;
很明顯,這個過程很容易出錯和繁瑣。我記得在Java中這樣做:
pkt.x = stream.readShort();
pkt.y = stream.readShort();
是否有某種庫,使我能夠做到這一點,考慮到endianness?
我已經看過protobuf和cap'n'proto,但是當我可以定義協議的雙方都看起來很棒時,如果我必須解析特定的協議,我不確定它們會發揮出色。這是正確的還是我只是讀錯了資源?是否有替代方案更適合這項任務?
該協議本身是一個簡單的TCP消息導向格式:從TCP流到消息的處理已經完成,我想要一些東西來解析消息本身。所有消息都以一個雙字節標識字段開頭,標識字段告訴消息的類型,然後是消息數據。例如,對於一個移動分組:
0x00 0x01 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x02
[Msg. Id] [int32 X value] [int32 Y value]
我尋找可能,給定的消息結構,它解析成一個結構,考慮到端序某些庫,而無需編寫手動解析代碼。
您的意思是「想在一側使用生成的協議」? –
@jacek我真的不明白這個問題。你在問我關於protobuf的評論嗎? –
如果這是新的(又名「綠色領域」)協議,不要害怕使用類似的庫。我在生產中使用Thrift。非常好的類型安全代碼。也許使用FlatBuffers是低配置要求。我認爲沒有這樣的庫可以幫助解析舊的「手動」協議。 –