php - 这是如何工作的 : chr(($number >>6 )+192). chr(($number & 63)+128);

标签 php utf-8 multibyte chr

您能否解释一下这行代码如何与下一个代码等效:

<?php
$string = chr( ( $number >> 6 ) + 192 ).chr( ( $number & 63 ) + 128 );
?>

它相当于:

if ( $number >=128 && $number <=2047 ){

   $byte1 = 192 + (int)($number / 64); //= 192 + ( $number >> 6 )
   $byte2 = 128 + ($number % 64);      //= 128 + ( $number & 63 )
   $utf = chr($byte1).chr($byte2);
 }

例如输入数字 1989 都会产生 β

这些代码用于将 UNICODE 实体转换回原始 UTF-8 字符。

最佳答案

上面的代码使用二元运算符。 >> 是右移运算符。它将数字中的位向右移动(向更高有效位移动)。

所以11110000 >> 2 = 00111100

相当于除以2的幂 $number >> $n$number/pow(2,$n) 相同。

& 是“按位与”运算符。它比较两个数字上的相应位,并在结果中设置两个数字中均为 1 的位。

11110000 & 01010101 = 01010000

通过将 $number 与 63 (001111111) 相加,您将得到 $number 除以 64 的余数(也称为模数) ,写作$number % 64

关于php - 这是如何工作的 : chr(($number >>6 )+192). chr(($number & 63)+128);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14762311/

相关文章:

php - 多字节 strtr() -> mb_strtr()

PHP 将数组转换为对象

Php - 使用 mb_ 函数从 mysql 数据库中查找输入的前两个字符

javascript - Javascript 验证周六和周日

mysql - R在多种编码存储中读取SQL并以utf-8工作

linux - scp 文件到 linux 自动将文件名转换为 utf8

php - 用 utf-8 编码 php 页面给我错误

R-无效的多字节字符串 1

php - Laravel 4 Auth::attempt 使用电子邮件或用户名和密码

php - 使用 json 和 cURL 访问禁止的错误 403 Web 服务