Welcome to the CHICKEN Scheme pasting service
Is this base64 encoding done right? pasted by C-Keen on Mon May 30 21:10:47 2011
(use binary-parse data-structures) (define hash "f1d2d2f924e986ac86fdf7b36c94bcdf32beec15") (define alphabet "0123456789-+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") (define (make-byte-reader str) (let ((str (string->list str))) (lambda () (cond ((null? str) #f) (else (let ((b (car str))) (set! str (cdr str)) (char->integer b))))))) (define (hash->numbers h) (define (hash-converter br l s) (cond ((= 0 l) (reverse s)) ((< l 12) (hash-converter br 0 (cons (br l) s))) (else (hash-converter br (- l 12) (cons (br 12) s))))) (let ((l (* 4 (string-length h))) (br (make-bit-reader (make-byte-reader h)))) (hash-converter br l '()))) (define (string->base64 s) (string-concatenate (map (lambda (n) (let* ((rem (modulo n 64)) (ts (floor (/ (- n rem) 64)))) (if (> ts 0) (string (string-ref alphabet ts) (string-ref alphabet rem)) (string (string-ref alphabet rem))))) (hash->numbers s)))) (string-length hash) ;; 40 (string-length (string->base64 hash)) ;; 27 (/ 320 12) = 26.6666...
conversion done right, I hope added by C-Keen on Mon May 30 21:28:12 2011
(use binary-parse data-structures) (define hash "f1d2d2f924e986ac86fdf7b36c94bcdf32beec15") (define alphabet "0123456789-+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") (define (make-byte-reader str) (let ((str (string->list str))) (lambda () (cond ((or (null? str) (null? (cdr str))) #f) (else (let ((a (car str)) (b (cadr str))) (set! str (cddr str)) (string->number (string a b) 16))))))) (define (hash->numbers h) (define (hash-converter br l s) (cond ((= 0 l) (reverse s)) ((< l 12) (hash-converter br 0 (cons (br l) s))) (else (hash-converter br (- l 12) (cons (br 12) s))))) (let ((l (* 4 (string-length h))) (br (make-bit-reader (make-byte-reader h)))) (hash-converter br l '()))) (define (string->base64 s) (string-concatenate (map (lambda (n) (let* ((rem (modulo n 64)) (ts (floor (/ (- n rem) 64)))) (if (> ts 0) (string (string-ref alphabet ts) (string-ref alphabet rem)) (string (string-ref alphabet rem))))) (hash->numbers s)))) (string-length hash) ;; 40 (string-length (string->base64 hash)) ;; 27 (/ 320 12) = 26.6666...