2進数を64進数に変換する

2進数を64進数に変換しようと思ったんだけど検索してもいい感じに出てこなかったから自分で書いた。

コード

<?php
$chars = array_merge(range(0,9), range('a','z'), range('A','Z'), array('+','/'));
$b64map = [];
foreach($chars as $k => $c) {
    $b64map[bn(decbin($k), 6)] = $c;
}

function binToB64($binnum) {
    $chars = array_merge(range(0,9), range('a','z'), range('A','Z'), array('+','/'));
    $b64map = [];
    foreach($chars as $k => $c) {
        $b64map[bn(decbin($k), 6)] = $c;
    }

    $length = strlen($binnum);
    for($m = 0; $m < $length; $m = $m + 6) {}
    $bin = bn($binnum, $m);
    $binArray = str_split($bin, 6);
    $b64 = "";
    foreach($binArray as $b)
        $b64 .= $b64map[$b];
    return $b64;
}

function bn($binnum, $n) {
    $length = strlen($binnum);
    $l = $n - $length;
    $zero = "";
    for($i = 0; $i < $l; $i++)
        $zero .= "0";
    return $zero .$binnum;
}
?>

仕組み

汚いコードなので忘れた時に備えて仕組みも書いておく。

まず2進数と64進数の変換表を作る。

2進数の桁が6n桁でない場合桁が6n桁になるまで上位桁を0で埋める。

次に文字列の2進数を6桁毎に区切る。

区切られた2進数をそれぞれ64進数に変換して結合する。

終わり。

感想

2も64も基数が2で揃っているので2進16進変換と同じ要領で変換できた。

デコード部分は今のところ使う予定が無いので作ってません。

より良い方法があれば教えてください。

人感センサーが届いたので遊んだ

この間買った人感センサーが届いた。

はてブロを始めて2週間経ったわけだけど、このまま記事を書かないとブログの存在を忘れそうなのでちょっとしたことでも記事にすることにした。

人感センサー

名前の通りだけど動いてるものならなんでも反応したのでモーションセンサーって言ったほうがいいと思う。

ちなみにこれを買った。

人感センサー 〈 Arduino 〉

人感センサー 〈 Arduino 〉

 

360円程で安かったから2個買ったけど明細を見たら送料で540円取られてた。

サイズは3.2cm x 2.4cmとかなり小さい。

f:id:lightnet328:20140910183531j:plain

f:id:lightnet328:20140910183541j:plain

可変抵抗器によってセンシング距離(左)と遅延時間(右)を調節できるみたい。

f:id:lightnet328:20140910183603j:plain

使ってみた

一応、コードも載せておく。

コード

int pir = 2;
int led = 13;
int state = LOW;

void setup() {
  pinMode(pir, INPUT);
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  if(digitalRead(pir)) {
    if(state == LOW) {
      Serial.println("on");
      state = HIGH;
    }
  } else {
    if (state == HIGH){
      Serial.println("off");
      state = LOW;
    }
  }
  digitalWrite(led, state);
}

繋いだ。

f:id:lightnet328:20140910183644j:plain

手をかざすと光る。

f:id:lightnet328:20140910183659j:plain

楽しい。

感想

センサー系楽しい。
Arduinoは去年、室温を計測してTwitterで呟く物を作って以来触ってなかったのでこれを機会に人感センサーを使った何かを作ってみたい。

見たまま編集を続けるのもなんだったのでMarkdownを少し勉強したけどその時間のほうが人感センサーで遊んでいた時間より長かった。

ブログ始めました

今までWordpressでブログを書いてた(あんまり書いてなかった)けどテンプレートから何まで自分で作らないと気がすまない性分で、一つ記事書くのにも他の気になったところを弄る羽目になってとても面倒だったのではてブロを始めて前のブログを消しましたとさ。

 

前みたいにブログに書くネタが無いっつって一年過ごさないようにしたいですね。

終わり