(define (alist->name/value-pairs alist) (map (lambda (entry) (let* ((name (car entry)) (value (cdr entry)) (name-len (string-length name)) (value-len (string-length value)) (name-len-size (if (> name-len #x7f) 4 1)) (value-len-size (if (> value-len #x7f) 4 1)) (name-len-start 0) (value-len-start name-len-size) (name-start (+ value-len-start value-len-size)) (value-start (+ name-start name-len)) (blob-len (+ value-start value-len)) (blob (make-empty-record blob-len))) (if (> name-len-size 1) (u32encode blob name-len (+ 3 name-len-start) (+ 2 name-len-start) (+ 1 name-len-start) name-len-start) (u8vector-set! blob name-len-start name-len)) (if (> value-len-size 1) (u32encode blob value-len (+ 3 value-len-start) (+ 2 value-len-start) (+ 1 value-len-start) value-len-start) (u8vector-set! blob value-len-start value-len)) (with-input-from-string name (lambda () (read-u8vector! name-len blob (current-input-port) name-start))) (with-input-from-string value (lambda () (read-u8vector! value-len blob (current-input-port) value-start))) blob)) alist))