0

次の単純なプロトコル フレームがあります。テストのために、固定の CRC フィールドを想定してきましたが、フレーム内の前のバイトから計算された実際の CRC を追加する必要があります。どうやってするの?多分構造体をネストすることによって?

MyFrame = Struct("MyFrame", 
                ULInt8("type"),
                ULInt8("IDMsg"),
                ULInt8("totalPackets"),
                ULInt8("numPacket"),
                ULInt8("day"),
                ULInt8("month"),
                ULInt8("year"),
                ULInt8("hour"),
                ULInt8("minute"),
                ULInt8("second"),
                ULInt16("length"),
                Bytes("payload", lambda ctx: (ctx.length - 14)),
                ULInt16("crc")
            )
4

2 に答える 2

0

CRC フィールドが正しいことを確認したい場合は、Validator Adapter を調べてください。_validate を次のようにオーバーライドします。

_validate(self, obj, context):
     return obj.crc == crc(context.type, context.idmsg, . . . )

crc は CRC 関数であり、コンテキストを使用して残りの引数を入力します。

最終コンテナに別のフィールドを追加する場合は、Value を使用します。

Value('calculated_crc', lambda ctx: crc(ctx.type, ctx.idmsg, . . . ))
于 2014-07-20T01:11:49.120 に答える