我有一个用例,其中标头可以包含 7 个字节加上可选的 0-15 字节信息,其中大小信息位于第 5 个字节的低 4 位,因此格式为:
4 bytes | 4 bits | 4 bits <- length of extra bytes | 2 bytes | 0-15 extra Bytes
我在下面的案例类中对此进行了建模
case class FHDR(DevAddr:Long, ADR:Boolean, ADRACKReq:Boolean, ACK:Boolean, FPending:Boolean, FCnt:Int, FOpts:ByteVector)
implicit val FHDRCodec = {
("dev_addr" | uint32L) ::
("adr" | bool) ::
("adr_ack_req" | bool) ::
("ack" | bool) ::
("f_pending" | bool) ::
variableSizePrefixedBytes(uint4,
"f_cnt" | uint16L,
"f_opts" | bytes)
}.as[FHDR]
在这种情况下,根据 scala 文档,我可以使用该variableSizePrefixedBytes
方法对大小和额外字节之间的 2 个额外字节进行建模。
但是我做错了,因为编译器无法证明这个编解码器可以转换为/从FHDR
类转换,我已经盯着这个看了一段时间了,但我一无所知