バイナリ変換
データをバイナリに変換するためには「pack」関数を使用します。
| pack関数 | | | 変換結果 = pack(フォーマット書式, 変換したいデータ1, 変換したいデータ1, ... , 変換したいデータn); | |
|
「pack」関数の書式は次の通りです。
| 書式 | 内容 | 備考 | | a | NULLで埋めた文字列 | | | A | 空白で埋めた文字列 | | | h | 16進文字列、下位バイトが先 | | | H | 16進文字列、上位バイトが先 | | | c | 符号付きchar | | | C | 符号なしchar | | | s | 符号付きshort | 常に16ビット、バイトオーダーはマシンに依存 | | S | 符号なしshort | 常に16ビット、バイトオーダーはマシンに依存 | | n | 符号なしshort | 常に16ビット、ビッグエンディアンバイトオーダー | | v | 符号なしshort | 常に16ビット、リトルエンディアンオーダー | | l | 符号付きlong | 常に32ビット、バイトオーダーはマシンに依存 | | L | 符号なしlong | 常に32ビット、バイトオーダーはマシンに依存 | | N | 符号なしlong | 常に32ビット、ビッグエンディアンバイトオーダー | | V | 符号なしlong | 常に32ビット、リトルエンディアンバイトオーダー | | i | 符号付きinteger | サイズおよびバイトオーダーはマシンに依存 | | I | 符号なしinteger | サイズおよびバイトオーダーはマシンに依存 | | f | float | サイズおよび表現はマシンに依存 | | d | double | サイズおよび表現はマシンに依存 | | x | NULLバイト | | | X | 1バイト戻る | | | @ | 絶対位置までNULLで埋める | | | * | 繰り返す | |
文字列をバイナリに変換するために書式に「a」を使っています。
1文字より多い文字列を扱うので繰り返すために「*」を使います。
このサンプルではユーザ定義関数を作って「pack」関数からバイナリデータを作成しています。
14~25行目が該当部分です。
「bin2hex」関数はデータを16進数に変換する関数です。
21行目では「bin2hex 」関数を用いて作成したバイナリを16進数に変換して表示しています。
「エンディアン」について
内部でのデータ表現時の上位バイト、下位バイトのデータの並び順をいいます。
【ビッグエンディアンの例】
「0x1234」というデータが「0x12 0x34」という並び順で処理されるもの。
【リトルエンディアンの例】
「0x1234」というデータが「0x34 0x12」という並び順で処理されるもの。
※CPUの種類により、いずれかのエンディアンを使用するのか?が決まっています。
|
|