Php 为什么,当我把一个字符串转换成二进制时,它会漏掉第一个零?
我尝试将任何字符串转换为二进制。但如果二进制文件以零开头,它不会显示它。我所有的测试都给出从第一个1到最后的二进制值。这是我的代码: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
$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”