您的输入字符串是否可覆盖?如果是这样,这是最简单且可能最快的方法:
void XOR( char *input, int key ){
for(int temp = 0; input[temp] != '\0'; ++temp){
input[temp] ^= (key + temp) % 255;
}
}
它改变了给定的字符串,而不是返回新的东西。但由于您很有\0
可能在输出中获得字符,您可能会发现这更可靠:
void XOR( char *input, int key, int length ){
for(int temp = 0; temp < length; ++temp){
input[temp] ^= (key + temp) % 255;
}
}
(显然长度没有改变)
更新:
看到评论后,也许这就是你想要的。但要小心;您需要记住释放返回的内存,这不是纯 C++ 程序员习惯的;
char *XOR( const string &s, int key ) {
const std::size_t l = s.size( );
char *r = (char *) malloc( (l + 1) * sizeof( char ) );
for( std::size_t i = 0; i < l; ++ i ) {
r[i] = s[i] ^ ((key + (int) i) % 255)
}
r[l] = '\0'; // only needed if you need a null-capped string, which seems unlikely since your string could well contain nulls anyway
return r;
}