ここでは、文字列を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 ) の範囲であるため、それ以上の値をパラメータとして与えた場合はサンプルは動作しません。エラーチェックを追加したり、正規表現を見直したりする必要があります。