我在网上发现了这段代码,我想知道它的作用:
$k[$i] = ord($key{$i}) & 0x1F;
我知道ord()
会返回一个ASCII值,但我不清楚大括号的作用$key{$i}
以及& 0x1F
的作用。
答案 0 :(得分:8)
这不是数组语法。它仅用于从字符串访问单个字符。索引必须是数字。
$str{1} == $str[1]
此处在信息框中简要提及:http://www.php.net/manual/en/language.types.string.php#language.types.string.substr
此外,它已正式宣布弃用。手册中已经开启和关闭了所谓的弃用,但如果不常见,语法仍然非常有效。
& 0x1F
是一个明智的AND。在这种情况下,它将十进制值限制为0到31。
答案 1 :(得分:3)
问题的第一部分:花括号
这是关于引用变量的值。
在您的示例中,如果$i
等于123
,那么
$k[$i] = ord($key{$i}) & 0x1F;
与
相同$k[123] = ord($key[123]) & 0x1F;
问题的第二部分:'&'登录强>
&
是二元运算符。查看更多in the documentation。如果在两个变量中都设置了它,它会设置位。
答案 2 :(得分:3)
在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]中的更多内容。如果在两个变量中都设置了它,它会设置位。
答案 3 :(得分:2)
& 0x1F
是一个逐位操作,用于“标准化”字符,颜色等的值,这些值被放入十六进制但不一定“读”相同。详细了解Wikipedia here。
& 0x1f
相当于
& 00011111
这可以有效地将任何字节大小的值的前三位设置为0。
0xff & 0x1f
结果
0x1f
或
11111111 & 00011111
结果
00011111