2013-10-08 2 views
-1

Кто-нибудь знает, как преобразовать эту строку из языка программирования C++ в C? Я мог бы преобразовать почти все, мне просто нужна помощь, где она помечена как «ПОМОЩЬ».Преобразование кода строки из C++ в C

string original = "blablabla"; 
string encrypted = ""; 
string unencrypt = ""; 
char key = 'x'; 

for (int temp = 0; temp < original.size(); temp++){ 
    HELP-> encrypted += original[temp]^(int(key) + temp) % 255; <-HELP 
} 

Спасибо заранее!

+4

Пожалуйста, пост «C» преобразования, как вы есть. – kfsone

+2

'malloc' массив' char', достаточно большой, чтобы соответствовать зашифрованной строке, а затем делать то, что уже делает код, за исключением того, что это будет 'ecrypted [temp] =' вместо 'encrypted + ='. – Michael

+0

Какова ошибка, сгенерированная компилятором? –

ответ

3

Предположительно вам необходимо преобразовать вашу строку в char [] массивы.

const char* original = "blablabla"; 
int len = strlen(original); 
char* encrypted = malloc(len + 1); 
int key = 'x'; 

for (int i = 0; i < len; ++i) { 
    encrypted[i] = (char)((original[i]^(key + i)) & 0xff); 
} 

encrypted[len] = '\0'; 

// ... do work with encrypted 

free(encrypted); 

Если «не шифруется» не собираемся быть очень большими, и нет никаких шансов на рекурсию, вы можете заменить «таНос» с «ALLOCA», чтобы выделить память на стеке, в этом случае вы не» нужно освободить его.

const char* original = "blablabla"; 
int len = strlen(original); 
char* encrypted = alloca(len + 1); 
int key = 'x'; 

for (int i = 0; i < len; ++i) { 
    encrypted[i] = (char)((original[i]^(key + i)) & 0xff); 
} 

encrypted[len] = '\0'; 

// ... do work with encrypted 

// do not free encrypted, it's on the stack. 

Эта версия больше похожа на версию на С ++, так как зашифрованная информация автоматически исчезает, когда она выходит за пределы области видимости.

+0

'int (key)' должен быть '(int) key' в C. – Ferruccio

+0

Собственно, это должно быть size_t, поэтому я очистил весь этот беспорядок :) – kfsone

+0

Лучше все еще, int для всех :) – kfsone

0
char original[] = "blablabla"; 
char encrypted[sizeof(original)] = {0}; 
char unencrypt[sizeof(original)] = {0}; 
char key = 'x'; 

for (int i = 0, len = strlen(original); i < len; i++){ 
    encrypted[i] = original[i]^(int(key) + i) % 255; 
} 
0

Действительно я не смотрел на это близко, возможно, что-то вроде:

char * original = "blablabla"; 
char * encrypted = calloc(strlen(original)+1,1); 
char * unencrypt = calloc(strlen(original)+1,1); 
char key = 'x'; 

for (int temp = 0; temp < strlen(original); temp++){ 
    encrypted[temp] += original[temp]^(int(key) + temp) % 255; 
} 

free(encrypted); 
free(unencrypt); 
Смежные вопросы