base-64.scm 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. (define-module (base-64)
  2. #:use-module (rnrs base)
  3. #:use-module ((guile)
  4. #:select (lambda* λ))
  5. ;; SRFI 69: hash tables
  6. #:use-module ((srfi srfi-69))
  7. #:export (chars
  8. char->integer
  9. integer->char))
  10. (define chars
  11. #(#\A #\B #\C #\D #\E #\F #\G #\H
  12. #\I #\J #\K #\L #\M #\N #\O #\P
  13. #\Q #\R #\S #\T #\U #\V #\W #\X
  14. #\Y #\Z
  15. ;; 26
  16. #\a #\b #\c #\d #\e #\f #\g #\h
  17. #\i #\j #\k #\l #\m #\n #\o #\p
  18. #\q #\r #\s #\t #\u #\v #\w #\x
  19. #\y #\z
  20. ;; 52
  21. #\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9
  22. ;; 62
  23. #\+ #\/
  24. ;; 64
  25. ))
  26. (define translation-table
  27. (alist->hash-table
  28. '((#\A . 0) (#\B . 1) (#\C . 2) (#\D . 3) (#\E . 4) (#\F . 5) (#\G . 6) (#\H . 7)
  29. (#\I . 8) (#\J . 9) (#\K . 10) (#\L . 11) (#\M . 12) (#\N . 13) (#\O . 14) (#\P . 15)
  30. (#\Q . 16) (#\R . 17) (#\S . 18) (#\T . 19) (#\U . 20) (#\V . 21) (#\W . 22) (#\X . 23)
  31. (#\Y . 24) (#\Z . 25)
  32. ;; 26
  33. (#\a . 26) (#\b . 27) (#\c . 28) (#\d . 29) (#\e . 30) (#\f . 31) (#\g . 32) (#\h . 33)
  34. (#\i . 34) (#\j . 35) (#\k . 36) (#\l . 37) (#\m . 38) (#\n . 39) (#\o . 40) (#\p . 41)
  35. (#\q . 42) (#\r . 43) (#\s . 44) (#\t . 45) (#\u . 46) (#\v . 47) (#\w . 48) (#\x . 49)
  36. (#\y . 50) (#\z . 51)
  37. ;; 52
  38. (#\0 . 52) (#\1 . 53) (#\2 . 54) (#\3 . 55) (#\4 . 56) (#\5 . 57) (#\6 . 58) (#\7 . 59)
  39. (#\8 . 60) (#\9 . 61)
  40. ;; 62
  41. (#\+ . 62) (#\/ . 63))))
  42. (define char->integer
  43. (λ (char)
  44. (hash-table-ref translation-table char)))
  45. (define integer->char
  46. (λ (int)
  47. (vector-ref chars int)))