2012-10-15 156 views
16

是否有將二進制字符串轉換爲二進制或十進制值的功能?將二進制字符串轉換爲二進制或十進制值

如果我有一個二進制字符串000101,我應該怎麼做才能將它轉換成5

+0

你使用哪種語言? –

+1

哪種語言?這是一個非常基本的功能,你可以爲它編寫你自己的函數.. – Arpit

+1

@ChandraSekharWalajapet - OP標記了問題[tag:r];所以我想這涉及到語言[R](http://www.r-project.org/) – Marijn

回答

17

這裏是你可以嘗試什麼:

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 

也就是說,你可以輸入兩個字符串(因爲as.character())和數字的二進制值,但也有一些問題,大量像binNum。據我瞭解,你也想二進制字符串轉換爲數字二進制值,但遺憾的是,至少在基礎R.沒有這樣的數據類型

編輯:現在BinToDec也接受二元載體,這可能是一個解決方案大數。從包功能digitsBase()sfsmisc返回這樣的載體:

(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 

最後,另一個可能性是包compositions,例如:

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

謝謝,我認爲這是比我寫的更好的方法... – LifeWorks

6

此函數計算十進制版本與柔性基底。基本等於2是二進制的,等等。這應該工作,直到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 
24

基地你可以使用packBits功能(在base包)。請記住,該功能需要非常具體的輸入。

(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 

也有strtoi功能(也在base包):

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

strtoi("000101", base = 2) 
# [1] 5 
+0

@LifeWorks,我忘記了'strtoi'函數;請參閱編輯。 – BenBarnes

0

在你有二進制字符串,所有以前的答案是偉大的情況。我經常發現自己處於想要編碼二進制向量組合的情況。從0和1的一個整數的組合翻譯的邏輯總是相同的:

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

其中B是一個矩陣,每一列是二元載體。

例子:

isBig <- c(0, 1, 0, 1) 
isRed <- c(0, 0, 1, 1) 
B = cbind(isBig,isRed) 
bincount(B) 
# 0 1 2 3 
5
base::strtoi(binary_string, base = 2) 
相關問題