2013年12月8日日曜日

rubyのpackメソッドがわからない

標記の通りなんですが・・・。

packメソッドはsimple-routerのrouter-util.rbで使われています。
構文は「pack(template)->string」で、説明は「配列の内容をtemplateで指定された文字列にしたがってバイナリとしてパックした文字列を返す」と書いてありますが、いったい何がどうなるのでしょうか?

調べてわかったのは、packメソッドっというのはruby以外にPHPやperlにもある。
packではバイナリデータを出力するメソッドのようです。
構文のtemplateで型指定と長さを指定します。

それ以上の事はわかりませんでした。
とりあえず今回はtemplateの内容をまとめてみます。
(といってもリファレンスマニュアルからの抜粋ですが・・・)

template文字列説明
aASCII(足りない部分はnull文字を詰める)
AASCII(足りない部分はスペースを詰める)
Znull終端文字列(aと同じ)
bビットストリング(各バイトごとに下位ビットから上位ビット)
Bビットストリング(各バイトごとに上位ビットから下位ビット)
h16進数文字列(下位ニブルが先)
H16進数文字列(上位ニブルが先)
cchar(8bit符号付整数)
Cchar(8bit符号なし整数)
sshort(16bit符号付整数、エンディアンに依存)
Sunsigned short(16bit符号なし整数、エンディアンに依存)
iint(符号付整数、エンディアンとintのサイズに依存)
Iunsigned int(16bit符号なし整数、エンディアンとintのサイズに依存)
llong(32bit符号付整数、エンディアンに依存)
Lunsigned long(32bit符号付整数、エンディアンに依存)
qlong long(符号付整数、エンディアンとlong longのサイズに依存)
Qunsigned long long(符号なし整数、エンディアンとlong longのサイズに依存)
mbase64された文字列。60オクテッドごとに改行が付加される
Mquoted-printable encodingされた文字列
nネットワークバイトオーダーのunsigned short
Nネットワークバイトオーダーのunsigned long
v"VAX"バイトオーダーのunsigned short
V"VAX"バイトオーダーのunsigned long
f単精度浮動小数点数
d倍精度浮動小数点数
eリトルエンディアンの単精度浮動小数点数
Eリトルエンディアンの倍精度浮動小数点数
gビッグエンディアンの単精度浮動小数点数
Gビッグエンディアンの倍精度浮動小数点数
pナル終端の文字列へのポインタ
P構造体(固定長文字列)へのポインタ
uunencodeされた文字列
UUTF-8
wBER圧縮指数
xナルバイト
X1バイト後退
@絶対位置への移動

また何かわかったら載せたいと思います。

0 件のコメント:

コメントを投稿