xrl*_*xrl 12 hex haskell pretty-print bytestring
什么是一个惯用的方法来处理字节串nibblewise和漂亮打印其十六进制(0-F)表示?
putStrLn . show . B.unpack
-- [1,126]
Run Code Online (Sandbox Code Playgroud)
其中,经过进一步的工作
putStrLn . show . map (\x -> N.showIntAtBase 16 (DC.intToDigit) x "") . B.unpack
["1","7e"]
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是
["1","7","e"]
Run Code Online (Sandbox Code Playgroud)
或者更好
['1','7','e']
Run Code Online (Sandbox Code Playgroud)
我可以捣乱["1","7e"]但是那个字符串操作,而我宁愿做数字操作.我是否需要下拉移动和屏蔽数值?
cro*_*eea 13
你现在可以使用了Data.ByteString.Builder.要将a打印ByteString到其十六进制等效值(每个字节有两个十六进制数字,按正确的顺序,并且有效),只需使用:
toLazyByteString . byteStringHex
Run Code Online (Sandbox Code Playgroud)
要么
toLazyByteString . lazyByteStringHex
Run Code Online (Sandbox Code Playgroud)
取决于ByteString你的味道作为输入.
lbo*_*lla 10
我想详细说明max taldykin的答案(我已经投票),我认为这个答案过于复杂.没有必要NoMonomorphismRestriction,printf或Data.List.
这是我的版本:
import qualified Data.ByteString as B
import Numeric (showHex)
prettyPrint :: B.ByteString -> String
prettyPrint = concat . map (flip showHex "") . B.unpack
main :: IO ()
main = putStrLn . prettyPrint . B.pack $ [102, 117, 110]
Run Code Online (Sandbox Code Playgroud)