ここでは、文字列を16進数のバイナリ表記に変換、またはその逆変換を行うサンプルプログラムを掲載しています。バイナリデータを扱う場合に使用できると思います。
スポンサーリンク
ここで掲載するサンプルコードは Zend Framework-1.11.3 内で使用されているメソッドを一部修正して掲載しています。なお、オリジナルは pear の Net_LDAP2_Util::asc2hex32 および Net_LDAP2_Util::asc2hex32 であるとのことです。
文字列を16進数のバイナリ表記に変換
/** * 文字を16進数表記の文字に変換する(1文字のみ) * @param <string> $string 任意の1文字 * @return <string> 16進数表記の文字列 */ function ascToHex($string) { $hex = dechex(ord($string)); if (strlen($hex) == 1) $hex = '0' . $hex; $string = '\\' . $hex; return $string; } $ascString = 'P'; var_dump(ascToHex($ascString)); // string '\50' (length=3) $ascString = '<'; var_dump(ascToHex($ascString)); // string '\3c' (length=3)
16進数表記のバイナリデータを文字列に変換
/** * 16進数表記の文字列をアスキーに変換する * @param <string> $string 16進数表記の文字(例:\30) * @return <string> アスキー文字 */ function hexToAsc($string) { $string = preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $string); return $string; } $ascString = '\60'; var_dump(hexToAsc($ascString)); // string '`' (length=1) $ascString = '\50'; var_dump(hexToAsc($ascString)); // string 'P' (length=1)
注意
アスキーコードは 0 ~ 127 ( 0x00 ~ 0x7f ) の範囲であるため、それ以上の値をパラメータとして与えた場合はサンプルは動作しません。エラーチェックを追加したり、正規表現を見直したりする必要があります。