我有以下代码:
<?
$binary = "110000000000";
$hex = dechex(bindec($binary));
echo $hex;
?>
哪个工作正常,我得到的值是c00。
但是,当我尝试转换000000010000时,我得到的值为“10”。我真正想要的是所有领先的零,所以我可以得到“010”作为最终结果。
我该怎么做?
编辑:我应该指出,二进制数的长度可以变化。所以$ binary可能是00001000,这将导致它08。
答案 0 :(得分:5)
您可以使用sprintf
轻松完成// Get $hex as 3 hex digits with leading zeros if required.
$hex = sprintf('%03x', bindec($binary));
// Get $hex as 4 hex digits with leading zeros if required.
$hex = sprintf('%04x', bindec($binary));
要处理$ binary中可变数量的位:
$fmt = '%0' . ((strlen($binary) + 3) >> 2) . 'x';
$hex = sprintf($fmt, bindec($binary));
答案 1 :(得分:3)
使用str_pad()
:
// maximum number of chars is maximum number of words
// an integer consumes on your system
$maxchars = PHP_INT_SIZE * 2;
$hex = str_pad($hex, $maxchars, "0", STR_PAD_LEFT);
答案 2 :(得分:1)
您可以使用以下内容添加必需数量的前导零:
$hex = str_repeat("0", floor(strspn($binary, "0") / 4)).$hex;
这是做什么的?
strspn
有多少前导零。floor
将它们抛出。str_repeat
预先在结果中添加了许多零。请注意,如果输入位数不是4的倍数,则可能会导致一个比预期更少的十六进制数字。如果有可能,您需要相应调整。