2013-10-08 203 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); 

如果「加密」是永遠不會是非常大的,而且也沒有遞歸的機會,你可以替換「的malloc」與「ALLOCA」來分配堆棧上的內存,在這種情況下,你不」 t需要釋放它。

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. 

該版本更像C++版本,因爲加密在超出範圍時會自動消失。

+0

'int(key)'需要在C中爲'(int)key'。 – 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);