1
我正在PHP中編寫一個應用程序,它需要採用任意長度的1和0的數組並將其轉換爲二進制變量(存儲在MySQL BINARY字段中)。我也需要一個功能來扭轉這個過程。將1和0的數組轉換爲二進制變量
我想用什麼來結束:
$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);
我寫了下面的兩個函數,這工作我的需求:
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;
}
數組應該能夠是任何長度(例如3比特,8比特或10,000比特),但如果這使得事情變得更容易,則可以僅限於整個字節。
有沒有一種更優雅/有效的方式來做到這一點?
根據[MySQL的網頁(https://dev.mysql.com/doc/refman/5.7/en/binary-varbinary.html)*的BINARY和VARBINARY類型類似於CHAR和VARCHAR,只是它們包含二進制字符串而不是非二進制字符串*所以簡單的'implode'和'str_split'應該可以工作。 – apokryfos
如果我更新表設置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'的位數組轉換爲 –