0

我正在尝试创建一个二进制/十六进制转换器以将十进制(以 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++;
}

这是将二进制文件拆分为 4s ( 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

仍然试图自己解决这个问题。

非常感谢任何建议谢谢

4

1 回答 1

0

我建议简单地使用decbin()and dechex()。这些是 php 中包含的函数,它们完全符合您的要求。

您可能想先检查它是否是一个数字(就像您已经在做的那样)。然后将其转换为整数(通过intval()),然后应用decbin()dechex()

http://php.net/manual/de/function.decbin.php http://www.php.net/manual/de/function.dechex.php http://php.net/manual/de/function。 intval.php

于 2013-09-09T00:42:39.370 回答