2013年5月11日土曜日

mysql の bit 型のサイコロ表記の謎

mysql の bit 型を pythonやruby で出力すると、サイコロの4つ目のような表示になる。あまり見かけない表示だなと思いつつ、ふと、プログラムではどのように使うのか疑問に思った。


まずは、なんの加工もなしにダイレクトにプログラムに渡ってきているなら、ビットマスクできるのではないかと考えて抽出対象ビットを16進数と&してみたが、0が帰ってきた。


サイコロの4つ目のような表示になるのだから変なコードになっているのかと思い、ファイルに出力して16進ダンプしてみると設定した通りの値'0x01' が入っていた。


いい年をしてなんだが、0x01 を画面に出力するとサイコロの4つ目表示になるのか試してみた。確かにサイコロの4つ目表示が出てきた。


脇道にそれるがこのサイコロの4つ目表示は、ビット表記なのか16進表記なのか確かめてみると、16進表記っぽいが、16進全部が表記できるわけでもないらしい(年甲斐もないが。。)


本題にもどるがここまで来て、プログラム内でこのbit 型を使うときは unpack して数値にしてから、ビット操作するのだと気がついた。

binary 型や blob 型のように無変換のレアなままの値を保持している型の値をプログラムで利用しようとおもったら、同じように unpack を駆使することになるのだろう。

ちなみに、型のない言語で変数に保存したこれらの値の取り扱い方法は、プログラム依存になるしかないのだろうか・・・・(年甲斐もないな)

0 件のコメント:

コメントを投稿