|
> ちなみに上の 0xaa を 0xff にすれば、επιστημη さんが言われた
> 0/1をひっくり返すと同じ結果になります。
やってみた。ちゃんとうごくぉ。
#include <iostream>
#include <fstream>
#include <locale>
#include <string>
#include <algorithm>
using namespace std;
struct bitwise_not {
wchar_t operator()(wchar_t x) const
{ return ~x; }
};
int main() {
locale loc("japanese");
wcout.imbue(loc);
wstring input = L"これが暗号化されるべき文字列";
wcout << L"before: " << input << endl;
// 裏返して書く
transform(input.begin(), input.end(), input.begin(), bitwise_not());
{
ofstream stream("crypt.txt", ios::binary);
copy(reinterpret_cast<const char*>(&input[0]),
reinterpret_cast<const char*>(&input[0]+input.size()),
ostreambuf_iterator<char>(stream));
}
// 読んで裏返す
wstring result;
{
ifstream stream("crypt.txt",ios::binary);
string buffer((istreambuf_iterator<char>(stream)),(istreambuf_iterator<char>()));
result.assign(reinterpret_cast<const wchar_t*>(&buffer[0]),
reinterpret_cast<const wchar_t*>(&buffer[0])+buffer.size()/sizeof(wchar_t));
}
transform(result.begin(), result.end(), result.begin(), bitwise_not());
wcout << L"after: " << result << endl;
}
|