微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP二进制到十六进制,前导零

我有以下代码

<?
$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 举报,一经查实,本站将立刻删除。

相关推荐