« 8月バイナリ | メイン | リリースまでの予定 »

2013年08月27日

吉里吉里Z 開発:: pack/unpack の追加

    

バイナリを処理可能にするメソッド pack/unpack を Array/Octet に追加。
それぞれ Array.pack(template)/Octet.unpack(template) ( Octet はパリアント型の内部型 )。
これらメソッドは perl/Ruby で実装されているもので、テンプレート文字列に従い、バイナリを分解/構築するもの。

pack は Array 要素を引数の template に従い、バイナリ化し、Octet 型の値を返す。
unpack は Octet が保持するバイナリを引数の template に従い、配列化し、Array クラス型の値を返す。

template で指定される型は以下の通り。

a : ASCII 文字列(ヌル文字が補完される)
A : ASCII 文字列(スペースが補完される)
b : 2進数文字列(下位ビットから上位ビットの順)
B : 2進数文字列(上位ビットから下位ビットの順)
c : 符号付き1バイト数値(-128 ~ 127)
C : 符号無し1バイト数値(0~255)
d : 倍精度浮動小数点値
f : 単精度浮動小数点値
h : 16進数文字列(low nybble first)
H : 16進数文字列(high nybble first)
i : 符号付きint数値(通常4バイト)
I : 符号無しint数値(通常4バイト)
l : 符号付きlong数値(通常4バイト)
L : 符号無しlong数値(通常4バイト)
n : 符号無しshort数値(ネットワークバイトオーダ)
N : 符号無しlong数値(ネットワークバイトオーダ)
s : 符号付きshort数値(通常2バイト)
S : 符号無しshort数値(通常2バイト)
v : 符号無しshort値(リトルエンディアン)
V : 符号無しlong値(リトルエンディアン)
x : ヌル文字/1バイト読み飛ばす
X : 1バイト後退
@ : 絶対位置までヌル文字を埋める/指定位置まで移動
m : Base64 encode / decode

template に使用可能なのは、上記文字と数値、'*'のみです。
カッコを使った繰り返しなどは未サポート。
現在のところサポートしているのは上記タイプのみですが、いくつか追加される可能性があります。
例えば、エンディアン固定の浮動小数点値等。
仕様については、perl/Ruby との差異により変更される可能性があります。

Octet の+演算しによる結合は出来るが、現在分割が出来ないのがやや不便かもしれない。
'@' による位置指定で読込みは可能。
バイナリ読込みは BinaryStream プラグインで出来ると思われる(未確認)。



投稿者 Takenori : 2013年08月27日 02:00




comments powered by Disqus
Total : Today : Yesterday : なかのひと