如果可能,我需要将此函数移植到c ++:
static unsigned char bux_code[3] = {0xFC, 0xCF, 0xAB};
void bux_convert(char* buf, int size)
{
int n = 0;
// ----
for (n=0;n<size;n++)
{
buf[n]^=bux_code[n%3];
}
}
我做了什么:
$bux_code = array("\xFC", "\xCF", "\xAB");
function bux_convert($string)
{
$size = strlen($string);
for ($n = 0; $n < $size; $n++) {
$string[$n] ^= $bux_code[$n % 3];
}
return $string;
}
var_dump ( bux_convert("£Ì•½Ï¼«ü") );
但我得到了这个错误:不能使用带有重载对象的赋值操作符或字符串
答案 0 :(得分:1)
在PHP中,您不能总是处理像$mystring[5]
或$mystring[$k]
这样的字符串的偏移量,然后在每个方面将结果字符视为数值。这是一种可以绕过它的方法:使用bux_convert()
将字符串转换为str_split()
开头的数组,然后使用implode()
将其转换回字符串末尾
此外,$bux_code
是一个全局变量,在函数内部不可见。将其移动到函数内部或将其声明为全局函数。
function bux_convert($string)
{
$bux_code = array(0xFC, 0xCF, 0xAB);
$size = strlen($string);
$string = array_map('ord', str_split($string));
for ($n = 0; $n < $size; $n++) {
$string[$n] ^= $bux_code[$n % 3];
}
return implode('', array_map('chr', $string));
}
var_dump ( bux_convert("£Ì•½Ï¼«ü") );
答案 1 :(得分:0)
试试这个。
$bux_code = array(hexdec("FC"), hexdec("CF"), hexdec("AB"));
答案 2 :(得分:0)
错误是抱怨“^ =”赋值运算符。
因此,尝试执行错误消息建议的内容,并在不使用assign-op运算符的情况下重写赋值:
$string[$n] = $string[$n] ^ $bux_code[$n % 3];
答案 3 :(得分:0)
你需要显式地将全局变量移植到函数中,所以在函数的第一行放行:
global $bux_code;
现在,找不到变量,未声明变量,因此xor不能对其进行操作。