R: Convert to or from Raw Vectors

rawConversion {base} | R Documentation

## Convert to or from Raw Vectors

### Description

Conversion and manipulation of objects of type `"raw"`.

### Usage

    charToRaw(x)
    rawToChar(x, multiple = FALSE)

    rawShift(x, n)

    rawToBits(x)
    intToBits(x)
    packBits(x, type = c("raw", "integer"))

### Arguments

`x` | object to be converted or shifted.
`multiple` | logical: should the conversion be to a single character string or multiple individual characters?
`n` | the number of bits to shift. Positive numbers shift right and negative numbers shift left: allowed values are `-8 ... 8`.
`type` | the result type.

### Details

`packBits` accepts raw, integer or logical inputs, the last two without any NAs.

Note that ‘bytes’ are not necessarily the same as characters, e.g. in UTF-8 locales.

### Value

`charToRaw` converts a length-one character string to raw bytes. It does so without taking into account any declared encoding (see `Encoding`).

`rawToChar` converts raw bytes either to a single character string or a character vector of single bytes (with `""` for `0`). (Note that a single character string could contain embedded nuls; only trailing nulls are allowed and will be removed.) In either case it is possible to create a result which is invalid in a multibyte locale, e.g. one using UTF-8. Long vectors are allowed if `multiple` is true.

`rawShift(x, n)` shift the bits in `x` by `n` positions to the right, see the argument `n`, above.

`rawToBits` returns a raw vector of 8 times the length of a raw vector with entries 0 or 1. `intToBits` returns a raw vector of 32 times the length of an integer vector with entries 0 or 1. (Non-integral numeric values are truncated to integers.) In both cases the unpacking is least-significant bit first.

`packBits` packs its input (using only the lowest bit for raw or integer vectors) least-significant bit first to a raw or integer vector.

### Examples

    x <- "A test string"
    (y <- charToRaw(x))
    is.vector(y) # TRUE

    rawToChar(y)
    rawToChar(y, multiple = TRUE)
    (xx <- c(y,  charToRaw("&"), charToRaw("more")))
    rawToChar(xx)

    rawShift(y, 1)
    rawShift(y, -2)

    rawToBits(y)

    showBits <- function(r) stats::symnum(as.logical(rawToBits(r)))

    z <- as.raw(5)
    z ; showBits(z)
    showBits(rawShift(z, 1)) # shift to right
    showBits(rawShift(z, 2))
    showBits(z)
    showBits(rawShift(z, -1)) # shift to left
    showBits(rawShift(z, -2)) # ..
    showBits(rawShift(z, -3)) # shifted off entirely

[Package base version 3.1.2 Index]