viceversa tabla numeros hexadecimal ejercicios ejemplos convertir conversion como binarios binario r binary typeconverter valueconverter bitconverter

tabla - numeros binarios



Convierte una cadena binaria a un valor binario o decimal (5)

¿Hay alguna función para convertir una cadena binaria en un valor binario o decimal?

Si tengo una cadena binaria 000101 , ¿qué debo hacer para convertirla en 5 ?


En el caso de que tenga una cadena binaria, todas las respuestas anteriores son excelentes. A menudo me encuentro en situaciones en las que quiero codificar una combinación de vectores binarios. La lógica de traducir de una combinación de 0 y 1 a un entero es siempre la misma:

bincount <- function(B, base=2) { return(B %*% base^seq(0,ncol(B)-1)) }

Donde B es una matriz, y cada columna es un vector binario.

Ejemplo:

isBig <- c(0, 1, 0, 1) isRed <- c(0, 0, 1, 1) B = cbind(isBig,isRed) bincount(B) # 0 1 2 3


Esta función calcula la versión decimal con una base flexible. La base es igual a 2 es binaria, etc. Esto debería funcionar hasta una base de 10.

base2decimal = function(base_number, base = 2) { split_base = strsplit(as.character(base_number), split = "") return(sapply(split_base, function(x) sum(as.numeric(x) * base^(rev(seq_along(x) - 1))))) } > base2decimal(c("000101", "00000001001100110000010110110111")) [1] 5 20121015


Esto es lo que puedes probar:

binStr <- "00000001001100110000010110110111" # 20121015 (binNum <- 00000001001100110000010110110111) # 20121015 [1] 1.0011e+24 binVec <- c(1,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1) # 2670721 shortBin <- 10011010010 # 1234 BinToDec <- function(x) sum(2^(which(rev(unlist(strsplit(as.character(x), "")) == 1))-1)) BinToDec(binStr) [1] 20121015 BinToDec(binNum) [1] 576528 BinToDec(binVec) [1] 2670721 BinToDec(shortBin) [1] 1234

Es decir, puede ingresar tanto cadenas (debido a as.character() ) como valores binarios numéricos, pero hay algunos problemas con números grandes como binNum . Según tengo entendido, también desea convertir una cadena binaria a valores binarios numéricos, pero desafortunadamente no hay tal tipo de datos al menos en la base R.

Edición: Ahora BinToDec también acepta vectores binarios, lo que podría ser una solución para grandes números. La función digitsBase() del paquete sfsmisc devuelve dicho vector:

(vec <- digitsBase(5, base= 2, 10)) Class ''basedInt''(base = 2) [1:1] [,1] [1,] 0 [2,] 0 [3,] 0 [4,] 0 [5,] 0 [6,] 0 [7,] 0 [8,] 1 [9,] 0 [10,] 1 BinToDec(vec) [1] 5

Finalmente, otra posibilidad son las compositions paquetes, por ejemplo:

(x <- unbinary("10101010")) [1] 170 (y <- binary(x)) [1] "10101010"


Podría usar la función packBits (en el paquete base ). Tenga en cuenta que esta función requiere una entrada muy específica.

(yy <- intToBits(5)) # [1] 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # [26] 00 00 00 00 00 00 00 # Note that there are 32 bits and the order is reversed from your example class(yy) [1] "raw" packBits(yy, "integer") # [1] 5

También está la función strtoi (también en el paquete base ):

strtoi("00000001001100110000010110110111", base = 2) # [1] 20121015 strtoi("000101", base = 2) # [1] 5


base::strtoi(binary_string, base = 2)