php 尝试在 string/chr 中设置位时发出警告
php warning when trying to set a bit in a string/chr
我用下面的代码设置了一点。这在 php5.
中运行良好
function setbit($pos) {
return (1 << $pos);
}
$test = chr(0);
$test += setbit(2);
print_r($test);
//result 4
自从升级到 php7 现在我收到错误警告:遇到非数字值。 $test 的输出仍然是 4,这是正确的。
我理解错误。这是因为 $test 是一个字符串,而我的 setbit 函数返回一个整数。
就像我说的那样,这在 php5 中运行良好,但现在在 php7.
中不起作用
$test 必须保留一个字符串,因为我稍后会在代码中执行一些字符串操作
例如
$test = chr(3);
我知道我可以关闭 php_ini 中的警告,但我宁愿解决问题也不愿隐藏它。
有没有办法在不关闭警告的情况下在 php7 中进行这项工作?
在字符中设置位的最佳方法是创建一个掩码,然后使用位运算符 |将角色与面具相关联。
/*
* set a bit to first char of string $str
* @param string $str
* @param $bitPos 0..7
* @return string, false if error
*/
function setBit($str, $bitPos){
if($bitPos < 0 OR $bitPos > 7) return false;
return $str |= chr(1<<$bitPos);
}
使用示例
$test = chr(0);
$test = setBit($test,0);
//or $test = setBit(chr(0),0);
echo bin2hex($test)."<br>\n"; //01
$test = setBit($test,1);
echo bin2hex($test)."<br>\n"; //03
我用下面的代码设置了一点。这在 php5.
中运行良好function setbit($pos) {
return (1 << $pos);
}
$test = chr(0);
$test += setbit(2);
print_r($test);
//result 4
自从升级到 php7 现在我收到错误警告:遇到非数字值。 $test 的输出仍然是 4,这是正确的。
我理解错误。这是因为 $test 是一个字符串,而我的 setbit 函数返回一个整数。 就像我说的那样,这在 php5 中运行良好,但现在在 php7.
中不起作用$test 必须保留一个字符串,因为我稍后会在代码中执行一些字符串操作 例如
$test = chr(3);
我知道我可以关闭 php_ini 中的警告,但我宁愿解决问题也不愿隐藏它。 有没有办法在不关闭警告的情况下在 php7 中进行这项工作?
在字符中设置位的最佳方法是创建一个掩码,然后使用位运算符 |将角色与面具相关联。
/*
* set a bit to first char of string $str
* @param string $str
* @param $bitPos 0..7
* @return string, false if error
*/
function setBit($str, $bitPos){
if($bitPos < 0 OR $bitPos > 7) return false;
return $str |= chr(1<<$bitPos);
}
使用示例
$test = chr(0);
$test = setBit($test,0);
//or $test = setBit(chr(0),0);
echo bin2hex($test)."<br>\n"; //01
$test = setBit($test,1);
echo bin2hex($test)."<br>\n"; //03