【问题标题】:Haskell Binary ParsingHaskell 二进制解析
【发布时间】:2011-04-01 18:56:15
【问题描述】:

我一直在尝试在 haskell 中实现一个协议解析器,而且我对这门语言还很陌生,尤其是在 monad 方面。我一直在使用 binary-0.5.0.2 并描述了我的协议的标头和所有有效负载。我要解析的消息如下所示: header + (payload A, payload B, ..) 其中 header 中的一个字段指定消息的有效负载类型。

我已经成功地解析了字节串中的第一条消息,但是不知道如何去读取下一条消息,丢弃在处理第一条消息时读取的字节。

这可能相当模糊,但我宁愿在通用解析器上获得输入,也不愿让我丑陋的代码以这种方式工作。

感谢您的帮助

【问题讨论】:

    标签: haskell binary protocols custom-protocol


    【解决方案1】:

    只需使用一系列解析操作,它们就会在执行过程中消耗输入。

    parseAll = do
        hdr <- parseHeader
        pa <- parsePayloadA
        pb <- parsePayloadB
        ...
    

    【讨论】:

      【解决方案2】:

      runGetStateData.Binary.Get 返回的元组的第二个元素是剩余的ByteString。您可以简单地继续应用您的解析器,直到出现错误或用完字节。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-17
        • 2011-11-23
        • 2014-02-20
        • 1970-01-01
        • 2023-03-15
        • 2014-11-12
        相关资源
        最近更新 更多