GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Bindat-Functions.html ・ emacs-doc.conao3.com

41.20.2 バイトをアンパックおよびパックする関数

以下のドキュメントにおいて、typeはbindat-typeから返されるBindat型の値を、rawはバイト配列を、structはアンパックされたフィールドデータを表すalistをそれぞれ指します。

関数: bindat-unpack type raw &optional idx

この関数は、ユニバイト文字列またはバイト配列 raw から、type に従ってデータを展開します。通常はバイト配列の先頭から展開を開始しますが、idx が nil 以外の場合は、代わりに使用する0ベースの開始位置を指定します。

値はアリストまたはネストされたアリストであり、各要素は展開後のフィールド1つを表します。

関数: bindat-get-field struct &rest name

この関数は、ネストされた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のいずれか一方にのみ固有のものではなく、両方の情報がその算出に寄与します。同様に、アンパッキングされる文字列や配列の長さは、仕様書で規定されているデータの総長よりも長くなる場合があります。

関数: bindat-length type struct

この関数は、type に従って struct 内のデータの総長を返します。

関数: bindat-pack type struct &optional raw idx

この関数は、alist struct のデータから、type に従ってパックされたバイト配列を返します。通常は、先頭から始まる新しいバイト配列を作成してそこにデータを格納します。ただし、raw が nil 以外の場合は、パック先としてあらかじめ確保されたユニバイト文字列またはベクトルを指定します。idx が nil 以外の場合は、raw へのパック開始オフセットを指定します。

事前割り当てを行う際は、範囲外エラーを避けるため、(length raw)が全長以上になるようにしてください。

関数: bindat-ip-to-string ip

インターネットアドレスベクトル ip を、通常のドット表記の文字列に変換してください。

(bindat-ip-to-string [127 0 0 1])
     ⇒ "127.0.0.1"