PHPでアプリケーションを作成しています。これは、任意の長さの1と0の配列をとり、バイナリ変数に変換する必要があります(MySQL BINARYフィールド)。このプロセスを逆にする関数も必要です。配列は任意ですることができるはず1と0の配列をバイナリ変数に変換する
function bits2bin($bits) {
$binarystring = implode($bits);
$bytes = str_split($binarystring, 8);
$hexstring = '';
foreach($bytes as $byte) {
$hexbyte = dechex(bindec($byte));
$hexbyte = str_pad($hexbyte, 2, "0", STR_PAD_LEFT);
$hexstring .= $hexbyte;
}
return $binary = pack('H*', $hexstring);
}
function bin2bits($binary) {
$hexbytes = unpack('H*', $binary);
$bits = array();
foreach(str_split($hexbytes[1], 2) as $hexbyte) {
$hexbyte = decbin(hexdec($hexbyte));
$hexbyte = str_pad($hexbyte, 8, "0", STR_PAD_LEFT);
foreach(str_split($hexbyte) as $bit) {
$bits[] = $bit;
}
}
return $bits;
}
:私は私のニーズに合わせて、以下の二つの機能、作業を書かれている
$bits = array(0,1,0,1,1,1,0,1);
$bin = bits2bin($bits);
bin2hex($bin); // returns "5D"
$bits = bin2bits($bin); // = array(0,1,0,1,1,1,0,1);
:私はで終わるしたいのですがどのような
長さ(例えば、3ビット、8ビット、または10,000ビット)であるが、これによりバイト全体が制限される可能性がある。
もっとエレガントで効率的な方法がありますか?
を単純な 'implode'と' str_split'が動作するはずです。*これらは、バイナリ文字列ではなくバイナリ文字列を含んでいる点を除いて、CHARとVARCHARに似ています。 – apokryfos
'update table set binfield = '01011101''(binfieldがBINARY 16の場合)私は '0x30313031313130310000000000000000'を返します。 私は' update table set binfield = b'01011101''でそれを行うことができますが、 MySQLに挿入するためのものです。私はまだバイナリ変数をPHP内で利用できるようにしたいと思います。 –
'$ bits = array(0,1,0,1,1,1,0,1);'を '5d'に変換したいだけですか –