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