2011-03-09 107 views
0

我需要的,如果可能的端口这个功能到C++:帮助移植的C++到PHP代码

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("£Ì•½Ï¼«ü")); 

但我得到这个错误:无法使用分配-OP运营商重载的对象和字符串

回答

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("£Ì•½Ï¼«ü")); 
+0

+1:击败我吧... – 2011-03-09 18:21:13

+0

哇!谢谢(和其他所有人)! – 2011-03-09 18:24:37

0

试试这个。

$bux_code = array(hexdec("FC"), hexdec("CF"), hexdec("AB")); 
0

错误是抱怨“^ =”赋值运算符。

所以,尽量在做错误信息显示什么,重写不使用分配-OP操作分配:

$string[$n] = $string[$n]^$bux_code[$n % 3]; 
+0

好吧,现在工作。但函数返回“2212212212”。在c + +它返回正常的单词 – 2011-03-09 18:14:46

0

你需要明确的端口全局的功能,所以在第一线的函数放行:

global $bux_code; 

现在,该变量未找到,未声明,因此xor不能运算符。