@@ -8,26 +8,18 @@ import Prelude.Bool
88%default total
99
1010
11−private
12−toHexDigit : Fin 16 -> Char
13−toHexDigit n = index n hexVect where
14− hexVect : Vect 16 Char
15− hexVect = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
16− 'A', 'B', 'C', 'D', 'E', 'F']
17−
1811b8ToString : Bits8 -> String
19−b8ToString c = pack (with List [c1, c2]) where
20− %assert_total -- We will only supply numbers that can fit in 4 bits
21− toFin16 : Bits8 -> Fin 16
22− toFin16 n = if n == 0
23− then fZ
24− else believe_me (fS (toFin16 (n-1)))
25− c1 = toHexDigit upper where
26− upper : Fin 16
27− upper = toFin16 (prim__lshrB8 c 4)
28− c2 = toHexDigit lower where
29− lower : Fin 16
30− lower = toFin16 (prim__andB8 c 0xf)
12+b8ToString c = pack (with List [c1, c2])
13+ where getDigit : Bits8 -> Char
14+ getDigit b = let n = prim__zextB8_Int b in
15+ if n >= 0 && n <= 9
16+ then '0' `prim__addChar` cast n
17+ else if n >= 10 && n <= 15
18+ then 'A' `prim__addChar` cast (n - 10)
19+ else '?' -- this is for totality - it should not happen
20+ c1 = getDigit (prim__andB8 (prim__lshrB8 c 4) 15)
21+ c2 = getDigit (prim__andB8 c 15)
22+
3123
3224b16ToString : Bits16 -> String
3325b16ToString c = c1 ++ c2 where
@@ -42,7 +34,7 @@ b32ToString : Bits32 -> String
4234b32ToString c = c1 ++ c2 where
4335 c1 = b16ToString upper where
4436 upper : Bits16
45− upper = prim__truncB32_B16 (prim__lshrB32 c 16)
37+ upper = prim__truncB32_B16 (prim__andB32 (prim__lshrB32 c 16) 0x0000ffff)
4638 c2 = b16ToString lower where
4739 lower : Bits16
4840 lower = prim__truncB32_B16 c
@@ -51,7 +43,7 @@ b64ToString : Bits64 -> String
5143b64ToString c = c1 ++ c2 where
5244 c1 = b32ToString upper where
5345 upper : Bits32
54− upper = prim__truncB64_B32 (prim__lshrB64 c 32)
46+ upper = prim__truncB64_B32 (prim__andB64 (prim__lshrB64 c 32) 0x00000000ffffffff)
5547 c2 = b32ToString lower where
5648 lower : Bits32
5749 lower = prim__truncB64_B32 c