请注意,intToBits()
返回的是"原始"向量,而不是字符向量(字符串).请注意,我的答案是@nico's original answer的略微扩展,从每个位中删除前导"0":
paste(sapply(strsplit(paste(rev(intToBits(12))),""),`[[`,2),collapse="")
[1] "00000000000000000000000000001100"
为了清晰起见,请分解步骤:
# bit pattern for the 32-bit integer '12'
x <- intToBits(12)
# reverse so smallest bit is first (little endian)
x <- rev(x)
# convert to character
x <- as.character(x)
# Extract only the second element (remove leading "0" from each bit)
x <- sapply(strsplit(x, "", fixed = TRUE), `[`, 2)
# Concatenate all bits into one string
x <- paste(x, collapse = "")
x
# [1] "00000000000000000000000000001100"
或者,作为@nico showed,我们可以使用as.integer()
作为一种更简洁的方法来删除每个位的前导零.
x <- rev(intToBits(12))
x <- paste(as.integer(x), collapse = "")
# [1] "00000000000000000000000000001100"
为了方便复制粘贴,以下是上述功能的一个版本:
dec2bin <- function(x) paste(as.integer(rev(intToBits(x))), collapse = "")