2015-03-12 4 views
2

Мне нужно манипулировать двоичной кодировкой как '0' и '1' простых строк, заданных как вход, используя ascii 7-бит.Как получить строку из Lazy.Builder?

Для кодирования я использовал функцию Data.ByteString.Lazy.Builder.string7 :: String -> Builder

Тем не менее, я не нашел способ преобразовать обратно полученный объект Builder в строку '0' и '1'. Является ли это возможным ? Есть ли другой способ?

Вспомогательный вопрос: И если бы я хотел его в шестнадцатеричной форме в виде текста?

ответ

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, вероятно, быстрее.

В качестве альтернативы, как сказал Майкл Снойман ниже, вы можете использовать Data.ByteString.Char8 или его ленивую версию, и вы получите правильные преобразования для начала.

+4

Я бы рекомендовал использовать [Data.ByteString.Lazy.Char8.unpack] (http://hackage.haskell.org/package/bytestring-0.10.4.1/docs/Data-ByteString-Lazy-Char8.html# v: распаковать). –

+0

@MichaelSnoyman справедливой точки. –

Смежные вопросы