PHP和Perl中运算符^的不同行为

PHP和Perl中运算符^的不同行为,php,perl,Php,Perl,我将脚本从Perl移植到PHP,但出现了错误。以下代码为相同的输入数据返回不同的结果。相反,返回给Perl的字符串比PHP中的行长2倍,但这一行的开头与PHP中的行一致。 我期望它能编码输入行,但直到最后我才明白 $test = $password ^ $newchal; 请帮助我在PHP中获得与在Perl中相同的$test值?语言的定义行为似乎不同 : 如果二进制位运算的操作数是大小不同的字符串, |和^ops的作用就像较短的操作数有额外的零位一样 在右边 似乎没有定义在这种情况下会发生什么

我将脚本从Perl移植到PHP,但出现了错误。以下代码为相同的输入数据返回不同的结果。相反,返回给Perl的字符串比PHP中的行长2倍,但这一行的开头与PHP中的行一致。 我期望它能编码输入行,但直到最后我才明白

$test = $password ^ $newchal;

请帮助我在PHP中获得与在Perl中相同的
$test值?

语言的定义行为似乎不同

:

如果二进制位运算的操作数是大小不同的字符串, |和^ops的作用就像较短的操作数有额外的零位一样 在右边

似乎没有定义在这种情况下会发生什么,但其中一个示例给出了它:

echo "12" ^ "9"; // Outputs the Backspace character (ascii 8)
                 // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8
因此,在PHP中,较长字符串中的额外字符将被丢弃,而在Perl中,它们将被包括在内

更新:

要在PHP中获得所需的行为,有两个选项。可以在字符串末尾添加空字符

$password = '        ';
$newchal = "abcdefghijklmnop";

#prints ABCDEFGH
echo $password ^ $newchal;

$password .= "\0\0\0\0\0\0\0\0";

#prints ABCDEFGHijklmnop
echo $password ^ $newchal;

本例假设字符串始终为固定的已知长度。如果需要处理任意情况,可以测量每个字符串的长度,然后根据需要添加空字符。当然,如果您不想更改原始变量,请在执行上述操作之前将其放入临时变量。

语言的定义行为似乎有所不同

:

如果二进制位运算的操作数是大小不同的字符串, |和^ops的作用就像较短的操作数有额外的零位一样 在右边

似乎没有定义在这种情况下会发生什么,但其中一个示例给出了它:

echo "12" ^ "9"; // Outputs the Backspace character (ascii 8)
                 // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8
因此,在PHP中,较长字符串中的额外字符将被丢弃,而在Perl中,它们将被包括在内

更新:

要在PHP中获得所需的行为,有两个选项。可以在字符串末尾添加空字符

$password = '        ';
$newchal = "abcdefghijklmnop";

#prints ABCDEFGH
echo $password ^ $newchal;

$password .= "\0\0\0\0\0\0\0\0";

#prints ABCDEFGHijklmnop
echo $password ^ $newchal;
本例假设字符串始终为固定的已知长度。如果需要处理任意情况,可以测量每个字符串的长度,然后根据需要添加空字符。当然,如果您不想更改原始变量,请在执行上述操作之前将其放入临时变量。

正确答案(如果我们知道,该密码不再是$newchal)

正确答案(如果我们知道,该密码不再是$newchal)


这两个变量都是字符串吗?是的!这两个变量都是字符串。具体的输出是什么:
var\u dump($password)
变量转储($newchal)
string(8)“password”string(16)“tc®”LU)dЮ·ЃqцJ€“
这实际上是个好问题;我不明白为什么要否决。这两个变量都是字符串吗?是的!两个变量都是字符串。
varu dump($password);
varu dump($newchal);
string(8)“password”string(16)”的确切输出是什么“LU)dЮ·ЃqцJ€“
这实际上是个好问题;我不明白为什么要否决。哦,我如何为同一个begavior在PHP中的最短值添加零位?哦,我如何为同一begavior在PHP中的最短值添加零位?