bytevector-u8-ref, bytevector-s8-ref - read a byte from a bytevector
LIBRARY
(import (rnrs)) ;R6RS
(import (rnrs bytevectors)) ;R6RS
(import (scheme base)) ;R7RS
SYNOPSIS
(bytevector-u8-ref bytevector k)
(bytevector-s8-ref bytevector k)
DESCRIPTION
The
bytevector-u8-ref
procedure returns the byte at index
k
of
bytevector
as an unsigned byte ("octet").
The
bytevector-s8-ref
procedure returns the byte at index
k
of
bytevector
as a signed byte.
IMPLEMENTATION NOTES
There are no notable variations between implementations of these
procedures, apart from different levels of performance.
RETURN VALUES
Returns an integer in the range of 0--255 (unsigned) or in the
range -128--127 (signed). In R6RS this number is guaranteed to
be a fixnum.
EXAMPLES
(let ((b1 (make-bytevector 16 -127))
(b2 (make-bytevector 16 255)))
(list
(bytevector-s8-ref b1 0)
(bytevector-u8-ref b1 0)
(bytevector-s8-ref b2 0)
(bytevector-u8-ref b2 0)))
=> (-127 129 -1 255)
;; R7RS syntax. For R6RS, use #vu8(...) instead.
(bytevector-u8-ref '#u8(1 1 2 3 5 8 13 21)
5)
=> 8
APPLICATION USAGE
These procedure are commonly used when a program is dealing directly
with data from disk, the network or some other hardware. For more
advanced non-uniform structures, a helper is usually used instead.
See
bytevector(7scm)
for more information.
RATIONALE
The
bytevector-u8-ref
procedure is the fundamental procedure for reading from bytevectors
from which all other bytevector read procedures can be built.
COMPATIBILITY
Bytevectors are absent from R5RS and earlier reports.
R7RS lacks
bytevector-s8-ref,
but it can be trivially implemented in terms of
bytevector-u8-ref:
(define (bytevector-s8-ref bv k)
(let ((v (bytevector-u8-ref bv k)))
(if (< v 128) v (- v 256))))
ERRORS
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.
In particular, the index k must be a valid index of bytevector.
- R7RS
-
The assertions described above are errors.
Implementations may signal an error, extend the procedure's
domain of definition to include such arguments,
or fail catastrophically.
SEE ALSO
bytevectors(7scm),
fixnums(7scm),
bytevector-u16-ref(3scm)
STANDARDS
R6RS,
R7RS
HISTORY
These procedures first appeared in R6RS, but they previously existed
in a slightly different form as u8vector-ref and s8vector-ref in
SRFI-4. The difference was that they required a vector of the matching
type (u8vector or s8vector).
Bytes themselves have a much longer history than Scheme but the number
of bits depended on the machine. Today, 8-bit bytes are the industry
standard.
AUTHORS
This page is part of the
scheme-manpages
project.
It includes materials from the RnRS documents.
More information can be found at
https://github.com/schemedoc/manpages/
.
Markup created by unroff 1.0sc, March 04, 2023.