如何从 Lazy.Builder 中获取字符串?

How to get a String from a Lazy.Builder?

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

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

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

附属问题:如果我想要十六进制形式的文本?

Data.ByteString.Lazy.Internal 中有一个 unpackChars 函数。在 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 或其惰性版本,您将获得正确的转换。