packing: Handling of foreign C fundamental data types

Description Usage Arguments Details Value See Also Examples

Description

Functions to unpack/pack (read/write) foreign C data types from/to R atomic vectors and C data objects such as arrays and pointers to structures.

Usage

1
2
.pack(x, offset, sigchar, value)
.unpack(x, offset, sigchar)

Arguments

x

atomic vector (logical, raw, integer or double) or external pointer.

offset

integer specifying byte offset starting at 0.

sigchar

character string specifying the C data type by a type signature.

value

R object value to be coerced and packed to a foreign C data type.

Details

The function .pack converts an R value into a C data type specified by the signature sigchar and it writes the raw C foreign data value at byte position offset into the object x. The function .unpack extracts a C data type according to the signature sigchar at byte position offset from the object x and converts the C value to an R value and returns it.

Byte offset calculations start at 0 relative to the first byte in an atomic vectors data area.

If x is an atomic vector, a bound check is carried out before read/write access. Otherwise, if x is an external pointer, there is only a C NULL pointer check.

Value

.unpack returns a read C data type coerced to an R value.

See Also

.dyncall for details on type signatures.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# transfer double to array of floats and back, compare precision:
n <- 6
input <- rnorm(n)
buf <- raw(n*4)
for (i in 1:n) {
  .pack(buf, 4*(i-1), "f", input[i])
}
output <- numeric(n)
for (i in 1:n) {
  output[i] <- .unpack(buf, 4*(i-1), "f")
}
# difference between double and float
difference <- output-input
print( cbind(input,output,difference) )

rdyncall documentation built on May 2, 2019, 6:15 p.m.