二进制数据不表示为1';s和0';PHP中的s

二进制数据不表示为1';s和0';PHP中的s,php,binary,Php,Binary,让我们假设以下十六进制字符串:c3b5394f6ea32eb9339ab3f9dd971f85。使用函数hex2bin我收到一个错误,十六进制字符串必须是偶数长度,所以首先,为什么会这样 第二,即使我删除了最后一个字符,我也不会接收由0和1表示的二进制文件,而是接收这些字符:��(sl˥)�M��。如何将其转换为0和1?为什么不能将奇数长度的十六进制字符串转换为二进制?您尝试执行的操作存在一些问题 首先,根据《hex2bin手册》() 注意:此函数不会将十六进制数转换为十六进制数 二进制数。这可

让我们假设以下十六进制字符串:
c3b5394f6ea32eb9339ab3f9dd971f85
。使用函数
hex2bin
我收到一个错误,十六进制字符串必须是偶数长度,所以首先,为什么会这样


第二,即使我删除了最后一个字符,我也不会接收由0和1表示的二进制文件,而是接收这些字符:
��(sl˥)�M��。如何将其转换为0和1?为什么不能将奇数长度的十六进制字符串转换为二进制?

您尝试执行的操作存在一些问题

首先,根据《hex2bin手册》
()

注意:此函数不会将十六进制数转换为十六进制数 二进制数。这可以使用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';

请提供一个用于生成此输出的代码示例。我们无法调试我们没有的代码。您所称的这些字符是十六进制数据的二进制表示形式。这就是输出。您为什么期望0和1?代码示例:
echo hex2bin('c3b5394f6ea32eb9339ab3f9dd971f8'))二进制不是最终的1和0吗?为什么当我把十进制数转换成二进制时,我会得到1和0?(e.x.
echo decbin(12);
)感谢您的回复。我最终希望获得如下所示的二进制结果:
https://www.rapidtables.com/convert/number/hex-to-binary.html
从给定的奇数十六进制字符串(如d288a775eba4132a982701fa625c9b820)中,我添加了一个转换函数,这可能会有所帮助。
110100101000100010100111011101011110101110100100000100110010101010011000001001110000000111111010011000100101110010011011100000100000
110100101000100010100111011101011110101110100100000100110010101010011000001001110000000111111010011000100101110010011011100000100000