bytevector-u8-set!(3scm) Scheme Programmer's Manual bytevector-u8-set!(3scm)

bytevector-u8-set!, bytevector-s8-set! - modify a byte in a bytevector

(import (rnrs))                     ;R6RS
(import (rnrs bytevectors))         ;R6RS
(import (scheme base))              ;R7RS

(bytevector-u8-set! bytevector k octet)
(bytevector-s8-set! bytevector k byte)  ;R6RS

The bytevector-u8-set! procedure stores octet at index k of bytevector. The bytevector-s8-set! procedure stores the two's complement representation of byte.

Returns unspecified values.

(let ((b (make-bytevector 16 -127)))
  (bytevector-s8-set! b 0 -126)
  (bytevector-u8-set! b 1 246)
  (list
    (bytevector-s8-ref b 0)
    (bytevector-u8-ref b 0)
    (bytevector-s8-ref b 1)
    (bytevector-u8-ref b 1)))
          => (-126 130 -10 246)

The bytevector-s8-set! procedure is absent from R7RS. A possible implementation is shown below.
(define (bytevector-s8-set! bytevector k byte)
  (let ((octet (if (< byte 0) (+ 256 byte) byte)))
    (bytevector-u8-set! bytevector k octet)))

This procedure can raise exceptions with the following condition types:
&assertion (R6RS)
The wrong number of arguments was passed or an argument was outside its domain. The index k was not a valid index for bytevector.

bytevector-u16-set!(3scm)

R6RS

This page is part of the scheme-manpages project. It includes materials from the RnRS documents. More information can be found at https://weinholt.se/scheme/manpages/.

2021-02-28