バイナリ変換
データをバイナリに変換するためには「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の種類により、いずれかのエンディアンを使用するのか?が決まっています。
|
|