如何从 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
或其惰性版本,您将获得正确的转换。
我需要使用 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
或其惰性版本,您将获得正确的转换。