我正在编写一个文件解析器,它正在读取包含固定长度、0 填充字符串的现有文件格式。
因此,例如,我需要解析的文件中有两个用于二进制结构的案例类。第一个包括一个可以是两个值之一的 4 个字符的字符串,后者包括一个 8 个字符的字符串(其中长度小于 8 个字符的值被 NUL 填充)
case class WadHeader( magic : String, items : Int, dirOffset : Int)
case class LumpIndex( offset : Int, size : Int, lumpName : String)
我试图编写一个简单的编解码器来解析第一个:
implicit val headerCodec : Codec[WadHeader] = {
("magic" | bytes(4)) ::
("items" | uint32) ::
("dirOffset" | uint32)
}.as[WadHeader]
但是,我发现它无法成功地将其转换为 WadHeader (大概是因为魔法值与案例类定义不完全匹配。我希望能够摄取固定大小的字符串字节并将其解码为 String 对象。
不幸的是,浏览文档只会发现“贪婪”字符串或大小前缀字符串选项。