我在网上发现了这段代码,我想知道它是做什么的:
$k[$i] = ord($key{$i}) & 0x1F;
我知道 ord()
返回一个ASCII值,但我不清楚大括号的作用 $key{$i}
以及它的作用 & 0x1F
。
我在网上发现了这段代码,我想知道它是做什么的:
$k[$i] = ord($key{$i}) & 0x1F;
我知道 ord()
返回一个ASCII值,但我不清楚大括号的作用 $key{$i}
以及它的作用 & 0x1F
。
那不是数组语法。它仅用于从字符串访问单个字符。索引必须是数字。
$str{1} == $str[1]
它在信息框中简要提到: http://www.php.net/manual/en/language.types.string.php#language.types.string.substr
此外,它已正式宣布弃用。 它已在手册中打开和关闭,但如果不常见,语法仍然非常有效。
该 & 0x1F
是一个有点明智的AND。在这种情况下,它将十进制值限制为0到31。
问题的第一部分:花括号
这是关于引用变量的值。
在您的示例中,如果 $i
等于 123
, 然后
$k[$i] = ord($key{$i}) & 0x1F;
会是一样的
$k[123] = ord($key[123]) & 0x1F;
问题的第二部分:'&'符号
&
是一个二元运算符。查看更多 在文档中。如果在两个变量中都设置了位,则设置这些位。
在PHP中,[方括号]或{花括号}是完全合法的,可互换的访问数组的方法:
注意:方括号和花括号可以互换使用来访问数组元素(例如$ array [42]和$ array {42}在上面的例子中都会做同样的事情)。
资源: http://www.php.net/manual/en/language.types.array.php
两者都完全有效;大括号不推荐使用。
关于“&0x1F”,其他像@Tadek的回复:
&是一个二元运算符。在文档中查看更多内容[http://www.php.net/manual/en/language.operators.bitwise.php]。如果在两个变量中都设置了位,则设置这些位。
该 & 0x1F
是一种逐位操作,用于“标准化”字符,颜色等的值,这些值被放入十六进制但不一定“读”相同。了解更多 维基百科在这里。
& 0x1f
相当于
& 00011111
这可以有效地将任何字节大小的值的前三位设置为0。
0xff & 0x1f
结果是
0x1f
要么
11111111 & 00011111
结果是
00011111