#!r6rs (library (rsc3 u8 encode) (export encode-i8 encode-i16 encode-i32 encode-i64 encode-u8 encode-u16 encode-u32 encode-u64 encode-f32 encode-f64 encode-cstr encode-pstr) (import (rnrs) (rnrs bytevectors)) (define be (endianness big)) (define (make-and-set* f k n) (let ((v (make-bytevector k 0))) (f v 0 n) v)) (define (make-and-set f k n) (let ((v (make-bytevector k 0))) (f v 0 n be) v)) (define (encode-u8 n) (make-and-set* bytevector-u8-set! 1 n)) (define (encode-u16 n) (make-and-set bytevector-u16-set! 2 n)) (define (encode-u32 n) (make-and-set bytevector-u32-set! 4 n)) (define (encode-u64 n) (make-and-set bytevector-u64-set! 8 n)) (define (encode-i8 n) (make-and-set* bytevector-s8-set! 1 n)) (define (encode-i16 n) (make-and-set bytevector-s16-set! 2 n)) (define (encode-i32 n) (make-and-set bytevector-s32-set! 4 n)) (define (encode-i64 n) (make-and-set bytevector-s64-set! 8 n)) (define (encode-f32 n) (make-and-set bytevector-ieee-single-set! 4 n)) (define (encode-f64 n) (make-and-set bytevector-ieee-double-set! 8 n)) (define (encode-str s) (u8-list->bytevector (map char->integer (string->list s)))) (define (encode-pstr s) (u8-list->bytevector (cons (string-length s) (map char->integer (string->list s))))) (define (encode-cstr s) (u8-list->bytevector (append (map char->integer (string->list s)) (list 0)))) )