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週間経ったわけだけど、このまま記事を書かないとブログの存在を忘れそうなのでちょっとしたことでも記事にすることにした。
人感センサー
名前の通りだけど動いてるものならなんでも反応したのでモーションセンサーって言ったほうがいいと思う。
ちなみにこれを買った。
360円程で安かったから2個買ったけど明細を見たら送料で540円取られてた。
サイズは3.2cm x 2.4cmとかなり小さい。
可変抵抗器によってセンシング距離(左)と遅延時間(右)を調節できるみたい。
使ってみた
一応、コードも載せておく。
コード
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); }
繋いだ。
手をかざすと光る。
楽しい。
感想
センサー系楽しい。
Arduinoは去年、室温を計測してTwitterで呟く物を作って以来触ってなかったのでこれを機会に人感センサーを使った何かを作ってみたい。
見たまま編集を続けるのもなんだったのでMarkdownを少し勉強したけどその時間のほうが人感センサーで遊んでいた時間より長かった。