以降のドキュメントではtypeはbindat-type
がリターンするようなBindatデータ値、raw
はバイト配列、structはunpackされたフィールドデータを表すalistを参照します。
この関数はユニバイト文字列、またはバイト配列raw
のデータをtypeに応じてunpackする。これは通常はバイト配列の先頭からunpack化を開始するが、idxが非nil
ならかわりに使用する0基準の開始位置を指定する。
値はそれぞれの要素がunpackされたフィールドを記述するalistかネストされたalist。
この関数はネストされたalistであるstructからフィールドのデータを選択する。structは通常はbindat-unpack
がリターンしたもの。nameが単一の引数に対応する場合にはトップレベルのフィールド値を抽出することを意味する。複数のname引数は副構造体を繰り返して照合することを指定する。nameが整数なら配列のインデックスとして動作する。
たとえば(bindat-get-field struct a b 2 c)
なら、フィールドa
の副フィールドb
の3つ目の要素からフィールドc
を探すことを意味する(Cプログラミング言語の構文struct.a.b[2].c
に該当)。
packやunpackの処理をすることによりメモリー内でデータ構造が変化しても、そのデータの全フィールド長の合計バイト数であるトータル長(total length)は保たれます。この値は一般的に仕様またはalist単独では固有ではありません。そのかわりこれら両方の情報がこの計算に役立ちます。同様にunpackされる文字列や配列の長さは仕様の記述にしたがってデータのトータル長より長くなるかもしれません。
この関数はstruct内のデータのtypeに応じたトータル長をリターンする。
この関数はalist
struct内のデータからtypeに応じてpackされたバイト配列をリターンする。これは通常は先頭から充填された新たなバイト配列を作成する。しかしrawが非nil
なら、それはpack先として事前に割り当てられたユニバイト文字列かベクターを指定する。idxが非nil
ならrawへpackする開始オフセットを指定する。
事前に割り当てる際にはout-of-rangeエラーを避けるために、(length
raw)
がトータル長またはそれ以上であることを確認すること。
インターネットアドレスのベクターipを通常のドット表記による文字列に変換する。
(bindat-ip-to-string [127 0 0 1]) ⇒ "127.0.0.1"