<?
$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的倍数,则这可能导致零十六进制数字比预期的少一.如果有可能,您将需要进行相应的调整.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。