带前导零的PHP二进制到十六进制
我有以下代码:带前导零的PHP二进制到十六进制,php,binary,hex,Php,Binary,Hex,我有以下代码: <? $binary = "110000000000"; $hex = dechex(bindec($binary)); echo $hex; ?> 这很好,我得到的值是c00 但是,当我尝试转换0000000 10000时,我得到了值“10”。我想要的是所有的前导零,所以我可以得到“010”作为最终结果 我该怎么做 编辑:我应该指出,二进制数的长度可以变化。因此,$binary可能是000011000,结果是08。您可以使用以下内容预先设置所需数量的前导零:
<?
$binary = "110000000000";
$hex = dechex(bindec($binary));
echo $hex;
?>
这很好,我得到的值是c00
但是,当我尝试转换0000000 10000时,我得到了值“10”。我想要的是所有的前导零,所以我可以得到“010”作为最终结果
我该怎么做
编辑:我应该指出,二进制数的长度可以变化。因此,$binary可能是000011000,结果是08。您可以使用以下内容预先设置所需数量的前导零:
$hex = str_repeat("0", floor(strspn($binary, "0") / 4)).$hex;
这有什么用
floor
将其剔除str\u repeat
在结果前面加上那么多的零// 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);
您可以通过以下方式轻松完成: 要处理$binary中的可变位数,请执行以下操作:
$fmt = '%0' . ((strlen($binary) + 3) >> 2) . 'x';
$hex = sprintf($fmt, bindec($binary));
您是否正在搜索类似于
str_pad()
?格式化字符串:@dev null居住者请注意,sprintf很好,但确实很慢。可能我这里缺少一些内容,但您无法计算前导零。这只是一个格式问题。真的很想知道你的帖子(和被接受的答案)。请注意,我编辑了我的注释,二进制字符串的长度可能不同,因此填充量需要根据二进制的长度进行更改。@MathewPatterson:此代码自动计算检查二进制输入所需的前导零数。试试看。哦,对不起,我想我根本没试过,只是觉得我不够具体!谢谢<代码>需要将4个前导零位的整组翻译成一个零十六进制数字。你如何翻译a0
?@hek2mgl:与你翻译例如af
到十进制数字序列15的方式相同(请注意,我明确地说的是数字,而不是数字,到处都是)。如果你不喜欢我选择的动词,我愿意接受更好的建议。你应该根据$binary
中的字符数,在每个数字系统中使用floor(strlen($binary)/4)
0==0
动态计算$maxchars
。这是无法计算的。这只是一个格式问题,但我完全不知道这和我的评论有什么关系。假设您的输入是$binary=“000000000000000000000 1”代码>。您的解决方案失败,因为正确的输出是0000001
<代码>00000000000000000000001==1
仅此而已。你能解释一下,你是如何计算的吗?重读OP:我实际上想要的是所有的前导零…只是想加上,如果你想处理不同长度的$binary,那么类似这样:
$fmt = '%0' . ((strlen($binary) + 3) >> 2) . 'x';
$hex = sprintf($fmt, bindec($binary));