帮助将c ++移植到php代码

时间:2011-03-09 17:59:32

标签: php c++

如果可能,我需要将此函数移植到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("£Ì•½Ï¼«ü") );

但我得到了这个错误:不能使用带有重载对象的赋值操作符或字符串

4 个答案:

答案 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不能对其进行操作。