我有以下代码:
$binary = "110000000000";
$hex = dechex(bindec($binary));
echo $hex;
?>
哪个工作正常,我得到的值为c00.
但是,当我尝试转换000000010000时,将获得值“ 10”.我真正想要的是所有前导零,因此最终结果为“ 010”.
我该怎么做呢?
编辑:我应该指出,二进制数的长度可以变化.因此$binary可能是00001000,结果为08.
解决方法:
您可以在必要数量的前导零之前加上以下内容:
$hex = str_repeat("0", floor(strspn($binary, "0") / 4)).$hex;
这是做什么的?
>使用strspn找出您的二进制字符串有多少个前导零.
>它将转换为您在十六进制表示形式上所需的前导零的数量.整个4个前导零位的组需要转换为一个零十六进制数字;任何剩余的零位已经被编码在输出的第一个非零十六进制数字中,因此我们使用floor来将它们淘汰.
>它使用str_repeat在结果前添加了许多零.
请注意,如果输入位数不是4的倍数,则这可能导致零十六进制数字比预期的少一.如果有可能,您将需要进行相应的调整.
标签:php,binary,hex
来源: https://codeday.me/bug/20191011/1890341.html