Php 为什么,当我把一个字符串转换成二进制时,它会漏掉第一个零?

Php 为什么,当我把一个字符串转换成二进制时,它会漏掉第一个零?,php,Php,我尝试将任何字符串转换为二进制。但如果二进制文件以零开头,它不会显示它。我所有的测试都给出从第一个1到最后的二进制值。这是我的代码: $value=unpack('H*',$MESSAGE); $binary.=base_convert($value[1],16,2); 例如,当我尝试转换字符“%”时,它显示:100101而不是:00101 我忘了什么吗 谢谢。 Yacine不难看出,问题归结为以下几点: 为什么base\u convert($value[1],16,2)不将结果置零 原因是b

我尝试将任何字符串转换为二进制。但如果二进制文件以零开头,它不会显示它。我所有的测试都给出从第一个1到最后的二进制值。这是我的代码:

$value=unpack('H*',$MESSAGE);
$binary.=base_convert($value[1],16,2);
例如,当我尝试转换字符“%”时,它显示:100101而不是:00101

我忘了什么吗

谢谢。
Yacine

不难看出,问题归结为以下几点:

为什么
base\u convert($value[1],16,2)
不将结果置零

原因是
base\u convert
将第一个参数解释为一个数字(例如,不是一个字节字符串);达到最高有效位后,将停止转换字节:

static char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
char buf[(sizeof(zend_ulong) << 3) + 1];
char *ptr, *end;
zend_ulong value;

if (Z_TYPE_P(arg) != IS_LONG || base < 2 || base > 36) {
    return ZSTR_EMPTY_ALLOC();
}

value = Z_LVAL_P(arg);

end = ptr = buf + sizeof(buf) - 1;
*ptr = '\0';

do {
    *--ptr = digits[value % base];
    value /= base;
} while (ptr > buf && value);

return zend_string_init(ptr, end - ptr, 0);
static char digits[]=“0123456789abcdefghijklmnopqrstuvwxyz”;
char buf[(sizeof(zend_ulong)36){
返回ZSTR_EMPTY_ALLOC();
}
值=Z_LVAL_P(arg);
end=ptr=buf+sizeof(buf)-1;
*ptr='\0';
做{
*--ptr=位数[值%base];
值/=基数;
}while(ptr>buf&&value);
返回zend_string_init(ptr,end-ptr,0);
(即当
值变为零时)该行为是正确的,因为可以在不改变结果的情况下在最高有效位后添加任意数量的零,例如
100101
等于
00100101


该函数没有影响结果格式的参数。因此,为了获得所需的输出,您需要使用其他函数例如
sprintf

,因为它将其视为0,在大多数情况下可以省略,例如01=1。您需要在place@treyBake$binary是一个字符串而不是intwait-您是否使用var_dump()$value检查实际值?您在哪里以及如何输出$binary@treyBake是的,“%是25”