我正在使用这个函数来检查二进制文件是否正确,我知道它看起来很邋..我不知道如何编写好的函数..但它似乎不起作用!
如果二进制= 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不正确?
答案 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个字符,其中包括您当前在函数中拥有的所有测试:
if
或> 100测试 edit2:名称checkbinary
可能不是该功能的完美选择。我不一定希望它检查8位/字节对齐和strlen()< = 100。
答案 1 :(得分:0)
function checkbinary($bin) {
return preg_match('#^[01]+$#', $bin);
}
有些测试:http://www.ideone.com/3D9SQetX和http://www.ideone.com/1HCCtxVV。
答案 2 :(得分:0)
我不完全确定你想要实现的目标,但是可能能够通过以下方式实现目标......
if($binaryString == base_convert($binaryString, 2, 2))...
本质上,这是比较从二进制到二进制的转换结果 - 因此如果结果输出相同,则输入必须是有效的二进制字符串。