入力文字列は上書き可能ですか? その場合、これが最も簡単でおそらく最速の方法です。
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;
}