你所尝试的方法存在一些问题。
首先,根据hex2bin
手册(http://php.net/manual/en/function.hex2bin.php) ...
注意:该函数无法将十六进制数转换为二进制数。可以使用base_convert()函数进行转换。
因此,你正在尝试使用它来完成它无法完成的任务 - 我认为这可能被视为PHP中的不良命名惯例。没有新东西。
其次,这个函数期望将字符串转换为数字,而一个由'c3b5394f6ea32eb9339ab3f9dd971f85'组成的十六进制字符串具有太多位数,无法表示为数值(考虑到每个字符给出4位值)。
按照手册中的提示,如果使用一些较小的示例,则可以获得以下结果...
echo hex2bin('71f8').PHP_EOL;
echo base_convert ('71f8' , 16 , 2 ).PHP_EOL;
echo decbin(12);
给出...
q�
111000111111000
1100
关于必须具有偶数个字符的问题。由于大多数系统使用2个十六进制字符来表示单个ASCII字符,这意味着它不能使用奇数字符进行转换,因此会发出警告并忽略最后一个字符。
更新:
要转换大量数字,您可以编写一个简单的函数,逐个转换每个字符,并将结果构建为字符串...
function strToBin ( $number ) {
$result = '';
for ( $i = 0; $i < strlen($number); $i++ ){
$conv = base_convert($number[$i], 16, 2);
$result .= str_pad($conv, 4, '0', STR_PAD_LEFT);
}
return $result;
}
echo strToBin('d288a775eba4132a982701fa625c9b820').PHP_EOL;
echo '110100101000100010100111011101011110101110100100000100110010101010011000001001110000000111111010011000100101110010011011100000100000';
(第二个输出是使用您指定的转换页面检查结果是否有效的结果。)
输出...
110100101000100010100111011101011110101110100100000100110010101010011000001001110000000111111010011000100101110010011011100000100000
110100101000100010100111011101011110101110100100000100110010101010011000001001110000000111111010011000100101110010011011100000100000
echo hex2bin('c3b5394f6ea32eb9339ab3f9dd971f8');
。二进制不是最终都是由一和零组成吗?为什么当我将十进制数转换为二进制时,我得到的却是一些数字?(例如echo decbin(12);
) - user2298995