Next: , Previous: , Up: Bytevectors   [Contents][Index]


6.6.12.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.


Next: , Previous: , Up: Bytevectors   [Contents][Index]