[ PHP ] 文字列を16進数のバイナリ表記に変換する ( dechex )

Pocket

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

参考

dechex – 10 進数を 16 進数に変換する

スポンサーリンク


Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>