文字列の各文字を配列内のビットのシーケンスとして取得するか、ループ内でトラバースする必要があります。どちらの方法でも機能します。これは私がASMで行っていた方法であり、C++でどのように実行できるかわかりません。
編集:私はasmでいつか行ったことを複製しようとしています。メモリ内のファイルを読み取り、ビットごとにトラバースし、各ビットを操作し、さらに暗号化して保存します。
基本的に単純な暗号化。それは宿題でもプロジェクトでもありません。
文字列の各文字を配列内のビットのシーケンスとして取得するか、ループ内でトラバースする必要があります。どちらの方法でも機能します。これは私がASMで行っていた方法であり、C++でどのように実行できるかわかりません。
編集:私はasmでいつか行ったことを複製しようとしています。メモリ内のファイルを読み取り、ビットごとにトラバースし、各ビットを操作し、さらに暗号化して保存します。
基本的に単純な暗号化。それは宿題でもプロジェクトでもありません。
標準ライブラリには、そのためのクラスがありstd::bitset
ます。それはあなたが必要とするものかもしれません。
ビット演算子を使用して反復できます。
unsigned char c = 'a'
for(int i = 0; i < 8; i++)
{
std::cout << (c >> i) & 1 << std::endl;
}
c
これにより、位置が右にシフトし、i
ビット単位のANDを使用して最下位ビットの値を取得します。
ビットマスクおよびビット単位の演算子、、、および/またはを使用して調べたいと&
思うでしょ|
う。それらをbool型の配列に格納したいと思うでしょう。>>
<<
bool bitArray[256];
もちろんunsigned char
、ビットの束を格納するためだけに使用するのが標準的な方法です。
文字をループして、ビットマスクでビットを確認するだけです。
char c;
for (int i = 0; i < 8; ++i) {
bool is_set = c & (1 << i);
std::out << "Bit " << i << ": " << is_set << '\n';
}
または文字列
std::string s;
for (auto p = s.begin(); p != s.end(); ++p) {
char c = *p;
// loop over the bits
}