我正在尝试创建一个二进制/十六进制转换器,将一个十进制(基数为 10)的数字/值转换为二进制和十六进制。
到目前为止,对于二进制来说,它工作正常,直到表单的输入大于 11 位及以上(字符串长度),因为它似乎多种多样。 11 位数字后,它开始在结果中添加" - "。我不确定这是来自因为我在代码中没有" - "。
我不确定这是否与大整数有关,因为我看到了有关该主题的其他一些问题(不是在 php 中,而是 java,所以不确定 php 中是否有更简单的东西)
也就是说,我的印象是表单输入始终是字符串。
若要测试变量是数字还是数字字符串(例如表单输入,它始终是字符串),必须使用 is_numeric()。 - 来自 : http://www.php.net/manual/en/function.is-float.php
(还没有十六进制,但需要提及它,因为以下一些代码包含它的部分。
这是PHP代码(注意:我确实检查了用户输入,只是还没有添加它)
$inpu = $_POST['number'];
$numinput = $_POST['number'];
if (is_numeric($numinput))
{
while ($numinput >= 1)
{
$binary .= $numinput % 2;
$numinput = $numinput / 2;
}
$mult = strlen($binary) % 4;
echo gettype($numinput) . "<br />";
echo gettype($binary) . "<br />";
echo gettype($mult) . "<br />";
echo $mult . "<br />";
while ($mult < 4)
{
$binary.= "0";
$mult++;
}
$revbinary = strrev($binary);
echo $inpu . " in binary = " . $revbinary ;
echo "<br /> <br />";
echo chunk_split($revbinary, 4);
echo "<br />" . gettype($revbinary) . "<br />";
echo gettype($inpu) . "<br />";
}
else
{
if (is_numeric($numinput))
{
echo "$numinput is over the max value of 255";
}
else
{
echo "your entry is not a vaild number <br />";
echo $numinput;
}
}
我不在寻找此代码的完整版本,因为您会破坏我的乐趣,我只是想知道为什么在 11 位左右之后输入"-"。在我添加之前,它也没有添加符号:
$mult = strlen($binary) % 4;
echo $mult . "<br />";
while ($mult < 4)
{
$binary.= "0";
$mult++;
}
这是将二进制文件分成4(0011 1101 0010 0110)。
编辑:想知道这是否有用:
echo gettype($numinput); result double
echo gettype($binary); result string
echo gettype($mult); result integer
gettype($revbinary); result string
echo gettype($inpu); result string
仍然试图自己解决这个问题。
任何建议都非常感谢谢谢
我建议简单地使用decbin()
和dechex()
。这些是 php 中包含的函数,它们完全可以完成您想要完成的任务。
您可能想先检查它是否是一个数字(就像您已经在做的那样)。然后将其转换为整数(通过 intval()
),然后应用 decbin()
并dechex()
http://php.net/manual/de/function.decbin.phphttp://www.php.net/manual/de/function.dechex.phphttp://php.net/manual/de/function.intval.php