rawConversion
位於 base
包(package)。 說明
"raw"
類型對象的轉換和操作,均用作位或 “packed” 8 位。
用法
charToRaw(x)
rawToChar(x, multiple = FALSE)
rawShift(x, n)
rawToBits(x)
intToBits(x)
packBits(x, type = c("raw", "integer", "double"))
numToInts(x)
numToBits(x)
參數
x |
要轉換或移動的對象。 |
multiple |
邏輯:應該轉換為單個字符串還是多個單獨的字符? |
n |
要移位的位數。正數右移,負數左移:允許的值為 |
type |
結果類型,部分匹配。 |
細節
packBits
接受原始、整數或邏輯輸入,最後兩個沒有任何 NA。
numToBits(.)
和 packBits(., type="double")
互為反函數,另請參閱示例。
請注意,‘bytes’ 不一定與字符相同,例如在 UTF-8 語言環境中。
值
charToRaw
將長度為 1 的字符串轉換為原始字節。它這樣做時不考慮任何聲明的編碼(請參閱Encoding
)。
rawToChar
將原始字節轉換為單個字符串或單個字節的字符向量(使用 ""
表示 0
)。 (請注意,單個字符串可以包含嵌入的 null;僅允許尾隨 null 並將被刪除。)在任何一種情況下,都可能創建在多字節語言環境中無效的結果,例如一種使用 UTF-8。如果multiple
為真,則允許Long vectors。
rawShift(x, n)
將 x
中的位向右移動 n
位置,請參見上麵的參數 n
。
rawToBits
返回的原始向量是條目為 0 或 1 的原始向量長度的 8 倍。 intToBits
返回的原始向量是條目為 0 或 1 的整數向量長度的 32 倍。(非整數數值)被截斷為整數。)在這兩種情況下,解包都是最低有效位在前。
packBits
將其輸入(僅使用原始或整數向量的最低位)將最低有效位首先打包到原始、整數或雙精度 (“numeric”) 向量。
numToInts()
和 numToBits()
將 double
精度數值向量拆分為兩個 integer
或每個 64 位,存儲為 raw
。在這兩種情況下,解包都是首先從最不重要的元素開始。
例子
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
packBits(as.raw(0:31))
i <- -2:3
stopifnot(exprs = {
identical(i, packBits(intToBits(i), "integer"))
identical(packBits( 0:31) ,
packBits(as.raw(0:31)))
})
str(pBi <- packBits(intToBits(i)))
data.frame(B = matrix(pBi, nrow=6, byrow=TRUE),
hex = format(as.hexmode(i)), i)
## Look at internal bit representation of ...
## ... of integers :
bitI <- function(x) vapply(as.integer(x), function(x) {
b <- substr(as.character(rev(intToBits(x))), 2L, 2L)
paste0(c(b[1L], " ", b[2:32]), collapse = "")
}, "")
print(bitI(-8:8), width = 35, quote = FALSE)
## ... of double precision numbers in format 'sign exp | mantissa'
## where 1 bit sign 1 <==> "-";
## 11 bit exp is the base-2 exponent biased by 2^10 - 1 (1023)
## 52 bit mantissa is without the implicit leading '1'
#
## Bit representation [ sign | exponent | mantissa ] of double prec numbers :
bitC <- function(x) noquote(vapply(as.double(x), function(x) { # split one double
b <- substr(as.character(rev(numToBits(x))), 2L, 2L)
paste0(c(b[1L], " ", b[2:12], " | ", b[13:64]), collapse = "")
}, ""))
bitC(17)
bitC(c(-1,0,1))
bitC(2^(-2:5))
bitC(1+2^-(1:53))# from 0.5 converge to 1
### numToBits(.) <==> intToBits(numToInts(.)) :
d2bI <- function(x) vapply(as.double(x), function(x) intToBits(numToInts(x)), raw(64L))
d2b <- function(x) vapply(as.double(x), function(x) numToBits(x) , raw(64L))
set.seed(1)
x <- c(sort(rt(2048, df=1.5)), 2^(-10:10), 1+2^-(1:53))
str(bx <- d2b(x)) # a 64 x 2122 raw matrix
stopifnot( identical(bx, d2bI(x)) )
## Show that packBits(*, "double") is the inverse of numToBits() :
packBits(numToBits(pi), type="double")
bitC(2050)
b <- numToBits(2050)
identical(b, numToBits(packBits(b, type="double")))
pbx <- apply(bx, 2, packBits, type="double")
stopifnot( identical(pbx, x))
相關用法
- R rawConnection 原始連接
- R raw 原始向量
- R rank 樣本排名
- R rapply 遞歸地將函數應用於列表
- R range 值範圍
- R readRenviron 從文件設置環境變量
- R remove 從指定環境中刪除對象
- R readChar 與連接之間傳輸字符串
- R rep 複製向量和列表的元素
- R readRDS 單個對象的序列化接口
- R reg.finalizer 對象的最終確定
- R row 行索引
- R row.names 獲取和設置 DataFrame 的行名稱
- R rowsum 根據分組變量給出矩陣或 DataFrame 的列和
- R rev 反轉元素
- R rle 遊程長度編碼
- R regmatches 提取或替換匹配的子字符串
- R readline 從終端讀取一行
- R round.POSIXt 舍入/截斷日期時間對象
- R readBin 與連接之間傳輸二進製數據
- R replace 替換向量中的值
- R readLines 從連接讀取文本行
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Convert to or from (Bit/Packed) Raw Vectors。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。