是否可以对 PHP 中的字符进行移位操作
Is it possible to do bitshift operations on a character in PHP
在这样的代码中:
<?php
$a = 'абв';
for($i = 0; $i < strlen($a); $i++)
{
echo $a[$i]>>6, ' ';
}
输出为 0 0 0 0 0 0
,这不是预期的结果。预期输出是值 3 和 2,具体取决于我们是在 UTF-8 字符的开头还是结尾。
有什么问题?
虽然 PHP 提供了许多函数,它们只是对 C 对应函数的简单包装,但开发人员已决定对位移运算符添加额外的检查。在 PHP shift-left 和 shift-right 中总是 return 0(甚至不是 false,这是有道理的)。
为了对一个字符进行位移,需要用ord
函数将其包裹起来:
<?php
$a = 'абв';
for($i = 0; $i < strlen($a); $i++)
{
echo ord($a[$i])>>6, ' ';
}
这会产生:3 2 3 2 3 2
如预期。
在这样的代码中:
<?php
$a = 'абв';
for($i = 0; $i < strlen($a); $i++)
{
echo $a[$i]>>6, ' ';
}
输出为 0 0 0 0 0 0
,这不是预期的结果。预期输出是值 3 和 2,具体取决于我们是在 UTF-8 字符的开头还是结尾。
有什么问题?
虽然 PHP 提供了许多函数,它们只是对 C 对应函数的简单包装,但开发人员已决定对位移运算符添加额外的检查。在 PHP shift-left 和 shift-right 中总是 return 0(甚至不是 false,这是有道理的)。
为了对一个字符进行位移,需要用ord
函数将其包裹起来:
<?php
$a = 'абв';
for($i = 0; $i < strlen($a); $i++)
{
echo ord($a[$i])>>6, ' ';
}
这会产生:3 2 3 2 3 2
如预期。