检查二进制字符串,这里遇到错误

时间:2010-01-30 11:56:35

标签: php binary

我正在使用这个函数来检查二进制文件是否正确,我知道它看起来很邋..我不知道如何编写好的函数..但它似乎不起作用!

如果二进制= 10001000它说错了,即使它不是..我的功能有什么问题?..

function checkbinary($bin) {
    $binary = $bin;
    if(!strlen($binary) % 8 == 0){
        return 1;
    }
    if (strlen($binary) > 100) { 
        return 1;
    } 
    if (!preg_match('#^[01]+$#', $binary)){ //Tried without !
        return 1;
    } 
    if (!is_numeric($binary)) {
        return 1;   
    }
}

if (checkbinary("10001000") != 1) {
  echo "Correct";
} else {
  echo "Binary incorrect";
}

为什么这个功能总是说10001000不正确?

3 个答案:

答案 0 :(得分:4)

if(!strlen($binary) % 8 == 0){应该是

if( strlen($binary) % 8 !== 0 ){

编辑和顺便说一下:由于你已经在使用preg_match(),你可以简化/缩短函数

function checkbinary($binary) {
  return 1===preg_match('#^(?:[01]{8}){0,12}$#', $binary);
}

这允许0 - 12组8 0/1个字符,其中包括您当前在函数中拥有的所有测试:

  • strlen()%8被内部组中的{8}覆盖
  • strlen()> 100由{0,12}覆盖,因为任何超过8 * 12 = 96个字符的字符串都会触发第一个if或> 100测试
  • 0/1测试很明显
  • is_numeric有点多余

edit2:名称checkbinary可能不是该功能的完美选择。我不一定希望它检查8位/字节对齐和strlen()< = 100。

答案 1 :(得分:0)

function checkbinary($bin) {
    return preg_match('#^[01]+$#', $bin);
}

有些测试:http://www.ideone.com/3D9SQetXhttp://www.ideone.com/1HCCtxVV

答案 2 :(得分:0)

我不完全确定你想要实现的目标,但是可能能够通过以下方式实现目标......

if($binaryString == base_convert($binaryString, 2, 2))...

本质上,这是比较从二进制到二进制的转换结果 - 因此如果结果输出相同,则输入必须是有效的二进制字符串。