c - 在 Scala 中映射 C 结构

标签 c scala parsing scodec

在 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/

相关文章:

php - 用PHP5解析PDF表单字段的最佳实践

C++成员布局

c - vfs_stat() 调用有什么问题?

Char* 数组参数 C

scala - 理解类型投影

scala - 移动某些数组元素的函数方法如何?

c - #default 每次都会输出 - switch case

java - Apache 飞艇/ Spark : Why can't I access a remote DB with this code sample

php - 使用 PHP 将 CSS 文件分解为数组

r - df_parse_dta_file() 错误 : Failed to parse C:/Users/folder/data. dta:不支持此版本的文件格式