bump 0.1.2.5
[htalkat.git] / HexString.hs
blob0ae94528917d6567721dd8eff7dc724571f090c1
1 -- This file is part of htalkat
2 -- Copyright (C) 2021 Martin Bays <mbays@sdf.org>
3 --
4 -- This program is free software: you can redistribute it and/or modify
5 -- it under the terms of version 3 of the GNU General Public License as
6 -- published by the Free Software Foundation, or any later version.
7 --
8 -- You should have received a copy of the GNU General Public License
9 -- along with this program. If not, see http://www.gnu.org/licenses/.
11 {-# LANGUAGE Safe #-}
13 module HexString where
15 import Data.ByteString (ByteString, pack, unpack)
17 parseHexString :: String -> Maybe ByteString
18 parseHexString s = pack <$> parseHexString' s
19 where
20 parseHexString' (a:b:c) = do
21 ha <- fromHex a
22 hb <- fromHex b
23 (16 * ha + hb :) <$> parseHexString' c
24 where
25 fromHex '0' = Just 0
26 fromHex '1' = Just 1
27 fromHex '2' = Just 2
28 fromHex '3' = Just 3
29 fromHex '4' = Just 4
30 fromHex '5' = Just 5
31 fromHex '6' = Just 6
32 fromHex '7' = Just 7
33 fromHex '8' = Just 8
34 fromHex '9' = Just 9
35 fromHex 'a' = Just 10
36 fromHex 'b' = Just 11
37 fromHex 'c' = Just 12
38 fromHex 'd' = Just 13
39 fromHex 'e' = Just 14
40 fromHex 'f' = Just 15
41 fromHex 'A' = Just 10
42 fromHex 'B' = Just 11
43 fromHex 'C' = Just 12
44 fromHex 'D' = Just 13
45 fromHex 'E' = Just 14
46 fromHex 'F' = Just 15
47 fromHex _ = Nothing
48 parseHexString' [] = Just []
49 parseHexString' _ = Nothing
51 showHexString :: ByteString -> String
52 showHexString = concatMap showHexWord8 . unpack
53 where showHexWord8 w =
54 let (a,b) = quotRem w 16
55 hex = ("0123456789abcdef" !!) . fromIntegral
56 in hex a : hex b : ""