6.6.6.3 Interpreting Bytevector Contents as Integers
The contents of a bytevector can be interpreted as a sequence of
integers of any given size, sign, and endianness.
(let ((bv (make-bytevector 4)))
(bytevector-u8-set! bv 0 #x12)
(bytevector-u8-set! bv 1 #x34)
(bytevector-u8-set! bv 2 #x56)
(bytevector-u8-set! bv 3 #x78)
(map (lambda (number)
(number->string number 16))
(list (bytevector-u8-ref bv 0)
(bytevector-u16-ref bv 0 (endianness big))
(bytevector-u32-ref bv 0 (endianness little)))))
⇒ ("12" "1234" "78563412")
The most generic procedures to interpret bytevector contents as integers
are described below.
- Scheme Procedure: bytevector-uint-ref bv index endianness size
- C Function: scm_bytevector_uint_ref (bv, index, endianness, size)
Return the size-byte long unsigned integer at index index in
bv, decoded according to endianness.
- Scheme Procedure: bytevector-sint-ref bv index endianness size
- C Function: scm_bytevector_sint_ref (bv, index, endianness, size)
Return the size-byte long signed integer at index index in
bv, decoded according to endianness.
- Scheme Procedure: bytevector-uint-set! bv index value endianness size
- C Function: scm_bytevector_uint_set_x (bv, index, value, endianness, size)
Set the size-byte long unsigned integer at index to
value, encoded according to endianness.
- Scheme Procedure: bytevector-sint-set! bv index value endianness size
- C Function: scm_bytevector_sint_set_x (bv, index, value, endianness, size)
Set the size-byte long signed integer at index to
value, encoded according to endianness.
The following procedures are similar to the ones above, but specialized
to a given integer size:
- Scheme Procedure: bytevector-u8-ref bv index
- Scheme Procedure: bytevector-s8-ref bv index
- Scheme Procedure: bytevector-u16-ref bv index endianness
- Scheme Procedure: bytevector-s16-ref bv index endianness
- Scheme Procedure: bytevector-u32-ref bv index endianness
- Scheme Procedure: bytevector-s32-ref bv index endianness
- Scheme Procedure: bytevector-u64-ref bv index endianness
- Scheme Procedure: bytevector-s64-ref bv index endianness
- C Function: scm_bytevector_u8_ref (bv, index)
- C Function: scm_bytevector_s8_ref (bv, index)
- C Function: scm_bytevector_u16_ref (bv, index, endianness)
- C Function: scm_bytevector_s16_ref (bv, index, endianness)
- C Function: scm_bytevector_u32_ref (bv, index, endianness)
- C Function: scm_bytevector_s32_ref (bv, index, endianness)
- C Function: scm_bytevector_u64_ref (bv, index, endianness)
- C Function: scm_bytevector_s64_ref (bv, index, endianness)
Return the unsigned n-bit (signed) integer (where n is 8,
16, 32 or 64) from bv at index, decoded according to
endianness.
- Scheme Procedure: bytevector-u8-set! bv index value
- Scheme Procedure: bytevector-s8-set! bv index value
- Scheme Procedure: bytevector-u16-set! bv index value endianness
- Scheme Procedure: bytevector-s16-set! bv index value endianness
- Scheme Procedure: bytevector-u32-set! bv index value endianness
- Scheme Procedure: bytevector-s32-set! bv index value endianness
- Scheme Procedure: bytevector-u64-set! bv index value endianness
- Scheme Procedure: bytevector-s64-set! bv index value endianness
- C Function: scm_bytevector_u8_set_x (bv, index, value)
- C Function: scm_bytevector_s8_set_x (bv, index, value)
- C Function: scm_bytevector_u16_set_x (bv, index, value, endianness)
- C Function: scm_bytevector_s16_set_x (bv, index, value, endianness)
- C Function: scm_bytevector_u32_set_x (bv, index, value, endianness)
- C Function: scm_bytevector_s32_set_x (bv, index, value, endianness)
- C Function: scm_bytevector_u64_set_x (bv, index, value, endianness)
- C Function: scm_bytevector_s64_set_x (bv, index, value, endianness)
Store value as an n-bit (signed) integer (where n is
8, 16, 32 or 64) in bv at index, encoded according to
endianness.
Finally, a variant specialized for the host’s endianness is available
for each of these functions (with the exception of the u8
accessors, for obvious reasons):
- Scheme Procedure: bytevector-u16-native-ref bv index
- Scheme Procedure: bytevector-s16-native-ref bv index
- Scheme Procedure: bytevector-u32-native-ref bv index
- Scheme Procedure: bytevector-s32-native-ref bv index
- Scheme Procedure: bytevector-u64-native-ref bv index
- Scheme Procedure: bytevector-s64-native-ref bv index
- C Function: scm_bytevector_u16_native_ref (bv, index)
- C Function: scm_bytevector_s16_native_ref (bv, index)
- C Function: scm_bytevector_u32_native_ref (bv, index)
- C Function: scm_bytevector_s32_native_ref (bv, index)
- C Function: scm_bytevector_u64_native_ref (bv, index)
- C Function: scm_bytevector_s64_native_ref (bv, index)
Return the unsigned n-bit (signed) integer (where n is 8,
16, 32 or 64) from bv at index, decoded according to the
host’s native endianness.
- Scheme Procedure: bytevector-u16-native-set! bv index value
- Scheme Procedure: bytevector-s16-native-set! bv index value
- Scheme Procedure: bytevector-u32-native-set! bv index value
- Scheme Procedure: bytevector-s32-native-set! bv index value
- Scheme Procedure: bytevector-u64-native-set! bv index value
- Scheme Procedure: bytevector-s64-native-set! bv index value
- C Function: scm_bytevector_u16_native_set_x (bv, index, value)
- C Function: scm_bytevector_s16_native_set_x (bv, index, value)
- C Function: scm_bytevector_u32_native_set_x (bv, index, value)
- C Function: scm_bytevector_s32_native_set_x (bv, index, value)
- C Function: scm_bytevector_u64_native_set_x (bv, index, value)
- C Function: scm_bytevector_s64_native_set_x (bv, index, value)
Store value as an n-bit (signed) integer (where n is
8, 16, 32 or 64) in bv at index, encoded according to the
host’s native endianness.