以下のドキュメントにおいて、typeはbindat-typeから返されるBindat型の値を、rawはバイト配列を、structはアンパックされたフィールドデータを表すalistをそれぞれ指します。
この関数は、ユニバイト文字列またはバイト配列 raw から、type に従ってデータを展開します。通常はバイト配列の先頭から展開を開始しますが、idx が nil
以外の場合は、代わりに使用する0ベースの開始位置を指定します。
値はアリストまたはネストされたアリストであり、各要素は展開後のフィールド1つを表します。
この関数は、ネストされた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に相当します。)
パッキングおよびアンパッキング処理によって(メモリ上の)データの構成は変化しますが、すべてのフィールド長の合計であるデータの総長(バイト単位)は保持されます。この値は、通常、仕様書やalistのいずれか一方にのみ固有のものではなく、両方の情報がその算出に寄与します。同様に、アンパッキングされる文字列や配列の長さは、仕様書で規定されているデータの総長よりも長くなる場合があります。
この関数は、type に従って struct 内のデータの総長を返します。
この関数は、alist struct のデータから、type
に従ってパックされたバイト配列を返します。通常は、先頭から始まる新しいバイト配列を作成してそこにデータを格納します。ただし、raw が nil
以外の場合は、パック先としてあらかじめ確保されたユニバイト文字列またはベクトルを指定します。idx が
nil 以外の場合は、raw
へのパック開始オフセットを指定します。
事前割り当てを行う際は、範囲外エラーを避けるため、(length raw)が全長以上になるようにしてください。
インターネットアドレスベクトル ip を、通常のドット表記の文字列に変換してください。
(bindat-ip-to-string [127 0 0 1])
⇒ "127.0.0.1"