r - 文字列 - バイナリ 変換 サイト



バイナリ文字列をバイナリまたは10進値に変換する (4)

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

https://src-bin.com

バイナリ文字列をバイナリまたは10進値に変換する関数はありますか?

バイナリ文字列000101がある場合、 5に変換するにはどうすればよいですか?


Answer #1

ここであなたが試すことができるものです:

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() )と数値バイナリ値の両方の文字列を入力できますが、 as.character()ような大きな数値にはいくつか問題があります。 あなたが理解しているように、バイナリ文字列を数値バイナリ値に変換したいと思っていますが、残念ながらベースRにはそのようなデータ型はありません。

編集:今、 BinToDecはバイナリベクトルを受け取ります。これは大きな数の解決策かもしれません。 関数digitsBase()は次のようなベクトルを返します。

(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"

Answer #2

バイナリ文字列を持っている場合、以前の回答はすべて素晴らしいです。 私は、バイナリベクトルの組み合わせをエンコードしたい状況で自分自身を見つけることがよくあります。 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

Answer #3
base::strtoi(binary_string, base = 2)




bitconverter