2011-03-09 140 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不能運算符。