Ale*_*eut 3 c parsing scala scodec
在Scala中读取和编写C风格字节结构的最佳方法是什么,如下所示:
struct account {
int id;
char[10] data1;
char[10] data2;
float dataFloat;
};
Run Code Online (Sandbox Code Playgroud)
Python中有解包函数,将字符串解释为压缩二进制数据.但我在Scala中找不到任何类比.
在Scala中进行这种映射的标准方法是什么?逐个读取字节非常不合适.我需要解析的协议从20世纪80年代开始,包含不同的字段(short,int,float),因此逐字节读取它将是非常低效的.
http://scodec.org/ (代码)可能就是你想要的.本视频中的一些示例:使用scodec应用程序介绍Shapeless
文档示例:通过Shapeless HLists支持自动案例类绑定:
case class Point(x: Int, y: Int, z: Int)
val pointCodec = (int8 :: int8 :: int8).as[Point]
val encoded: Attempt[BitVector] = pointCodec.encode(Point(-5, 10, 1))
// Successful(BitVector(24 bits, 0xfb0a01))
val decoded: Attempt[DecodeResult[Point]] = pointCodec.decode(hex"0xfb0a01".bits)
// Successful(DecodeResult(Point(-5,10,1),BitVector(empty)))
Run Code Online (Sandbox Code Playgroud)