在 Scala 中读写 C 风格字节结构的最佳方式是什么,如下所示:
struct account {
int id;
char[10] data1;
char[10] data2;
float dataFloat;
};
Python 中有 unpack 函数,可以将字符串解释为打包的二进制数据。但是我在 Scala 中找不到任何类似的东西。
Scala 中这种映射的标准方法是什么?一个一个地读取字节是非常不够的。我需要解析的协议(protocol)来自 1980 年代,包含不同的字段(short、int、float),因此逐字节读取它是非常不够的。
最佳答案
http://scodec.org/ (code)可能是你想要的。此视频中的一些示例:Introduction to Shapeless with applications from scodec
文档中的示例:通过 Shapeless HLists 支持自动案例类绑定(bind):
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)))
关于c - 在 Scala 中映射 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29841213/