如何从Lazy.Builder获取String?

时间:2015-03-12 07:57:12

标签: haskell bytestring

我需要使用ascii 7位将二进制编码操作为作为输入的简单字符串的'0''1'

对于编码,我使用了函数Data.ByteString.Lazy.Builder.string7 :: String -> Builder

但是,我还没有找到将生成的Builder对象转换回'0''1'字符串的方法。可能吗 ?还有另一种方式吗?

附属问题:如果我想用十六进制形式作为文本?

1 个答案:

答案 0 :(得分:1)

unpackChars中有Data.ByteString.Lazy.Internal个功能。 Data.ByteString.Internal中还有一个非懒惰的对应物。

import qualified Data.ByteString.Lazy.Builder as Build
import qualified Data.ByteString.Lazy as BS
import qualified Data.ByteString.Lazy.Internal as BSI

--> BSI.unpackChars $ Build.toLazyByteString $ Build.string7 "010101"
--"010101"

您也可以使用map (chr . fromIntegral) . BS.unpack代替unpackChars,但unpackChars可能更快。

另外,正如Michael Snoyman在下面评论过的那样,您可以使用Data.ByteString.Char8或其懒惰版本,然后您将获得正确的转换。