裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

関数言語の特性を生かしたプログラミング

2012年11月14日 | ブログラミング

2進64桁を16進16桁に変換 にて

# 64桁の01の数値列
set.seed(1)
a <- sample(0:1,64,replace =TRUE)
# 4桁の01の数値列を0,1,2,...fに対応づける
b <- as.matrix(expand.grid(rep(list(0:1),4)))
b <- b[,4:1]
d <- c(as.character(0:9),letters[1:6])
# 2進64桁を16進16桁に直す
chage64to16<- function(a){
    b <- as.matrix(expand.grid(rep(list(0:1),4)))
    b <- b[,4:1]
    d <- c(as.character(0:9),letters[1:6])
    n <- length(a)%/%4
    ret <- rep(0,n)
    for(i in 1:n){
        tmp <- apply((t(b) - a[(1+4*(i-1)):(4*i)]==0),2,prod)
        ret[i] <- d[which(tmp==1)]
    }
    ret
}
a
chage64to16(a)

bin2hex <- function(a) {
    as.hexmode(apply(matrix(a, 4), 2, function(byte) sum(c(8, 4, 2, 1)*byte)))
}
のように書く。
実行速度もずいぶん速くなるけど,元のプログラムの方が,「2進数・16進数の変換を学ぶ」という目的にはあっているのか?

コメント (1)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 分かりやすくプログラミング... | トップ | ダメ出し:par(new=TRUE) は... »
最新の画像もっと見る

1 コメント

コメント日が  古い順  |   新しい順
as.hexmode (r-de-r)
2012-11-15 09:56:25
as.hexmode の外に as.character が必要な場面もある
返信する

コメントを投稿

ブログラミング」カテゴリの最新記事