【发布时间】:2015-07-09 17:28:19
【问题描述】:
在这样的代码中:
<?php
$a = 'абв';
for($i = 0; $i < strlen($a); $i++)
{
echo $a[$i]>>6, ' ';
}
输出是0 0 0 0 0 0,这不是预期的。预期的输出是值 3 和 2,这取决于我们是在 UTF-8 字符的开头还是结尾。
有什么问题?
【问题讨论】:
标签: php char bit-manipulation
在这样的代码中:
<?php
$a = 'абв';
for($i = 0; $i < strlen($a); $i++)
{
echo $a[$i]>>6, ' ';
}
输出是0 0 0 0 0 0,这不是预期的。预期的输出是值 3 和 2,这取决于我们是在 UTF-8 字符的开头还是结尾。
有什么问题?
【问题讨论】:
标签: php char bit-manipulation
尽管 PHP 提供了许多函数,它们只是对 C 对应物的简单包装,但开发人员决定为位移运算符添加额外的检查。在 PHP 中 shift-left 和 shift-right 总是返回 0(甚至不是 false,这会有些道理)。
为了对一个字符进行位移,需要用ord函数包装它:
<?php
$a = 'абв';
for($i = 0; $i < strlen($a); $i++)
{
echo ord($a[$i])>>6, ' ';
}
这会按预期生成:3 2 3 2 3 2。
【讨论】: