Bytevectors
Bytevectors are sequences of unsigned 8-bit integers (0–255), useful for binary data and string encoding.
Literal Syntax
scheme
#u8(1 2 3) ; bytevector literal
#u8() ; empty bytevector
#u8(255 0 128) ; arbitrary byte valuesConstruction
bytevector
Create a bytevector from byte values.
scheme
(bytevector 1 2 3) ; => #u8(1 2 3)
(bytevector) ; => #u8()make-bytevector
Create a bytevector of a given length, optionally filled with a value.
scheme
(make-bytevector 4) ; => #u8(0 0 0 0)
(make-bytevector 3 255) ; => #u8(255 255 255)Access & Mutation
bytevector-length
Return the length of a bytevector.
scheme
(bytevector-length #u8(1 2 3)) ; => 3
(bytevector-length #u8()) ; => 0bytevector-u8-ref
Return the byte at a given index.
scheme
(bytevector-u8-ref #u8(10 20 30) 1) ; => 20
(bytevector-u8-ref #u8(10 20 30) 0) ; => 10bytevector-u8-set!
Set the byte at a given index. Uses copy-on-write — the original bytevector is unchanged.
scheme
(bytevector-u8-set! #u8(1 2 3) 0 9) ; => #u8(9 2 3)Copy & Append
bytevector-copy
Copy a slice of a bytevector. (bytevector-copy bv start end).
scheme
(bytevector-copy #u8(1 2 3 4 5) 1 3) ; => #u8(2 3)bytevector-append
Concatenate bytevectors.
scheme
(bytevector-append #u8(1 2) #u8(3 4)) ; => #u8(1 2 3 4)List Conversion
bytevector->list
Convert a bytevector to a list of integers.
scheme
(bytevector->list #u8(65 66)) ; => (65 66)list->bytevector
Convert a list of integers to a bytevector.
scheme
(list->bytevector '(1 2 3)) ; => #u8(1 2 3)String Conversion
utf8->string
Decode a bytevector as a UTF-8 string.
scheme
(utf8->string #u8(104 105)) ; => "hi"
(utf8->string #u8(72 101 108)) ; => "Hel"string->utf8
Encode a string as a UTF-8 bytevector.
scheme
(string->utf8 "hi") ; => #u8(104 105)
(string->utf8 "Hello") ; => #u8(72 101 108 108 111)