私は最初の C++ クラスを受講しており、文字を 16 進表現とバイナリの間で変換したいと考えています。次を使用して、16進数を印刷できます。
for(char c = 'a'; c <= 'z'; c++){
cout << hex << (int)c;
}
しかし、バイナリに対して同じことはできません。std::bin10 進数を 2 進数に変換するために使用できるものはありません。
そのようです:
for(char c = 'a'; c <= 'z'; c++){
std::bitset<sizeof(char) * CHAR_BIT> binary(c); //sizeof() returns bytes, not bits!
std::cout << "Letter: " << c << "\t";
std::cout << "Hex: " << std::hex << (int)c << "\t";
std::cout << "Binary: " << binary << std::endl;
}
C++にはバイナリIOマニピュレータはありません。おそらくビットシフト演算子を使用して、手動でカバーを実行する必要があります。実際の変換は難しい作業ではないので、C ++の初心者の能力の範囲内である必要があります(標準ライブラリに含まれていないという事実はそうではないかもしれません:))
編集:他の多くの人が例を挙げているので、私は私の好みの方法を与えるつもりです
void OutputBinary(std::ostream& out, char character)
{
for (int i = sizeof(character) - 1; i >= 0; --i)
{
out << (character >> i) & 1;
}
}
これは、任意の数値タイプにテンプレート化される可能性もあります。
少し多様性がある場合は、16要素のルックアップテーブルを使用して行うこともできます。
16進文字とそのバイナリ「ニブル」の間のマッピングを簡単に記述できます。
std::string HexCharToNibble( char c ) {
switch (c) {
case '0': return "0000";
case '1': return "0001";
//... fill in the rest
case 'f': return "1111";
default: assert(false); return "bad input";
};
あなたはこのようなことをすることができます:
for(char c = 'a'; c <= 'z'; c++){
// char is 8 bits. print 4 bits
// at a time, starting with the MSB
for (int i = 4; i>=0; i-=4) {
switch (((int)c >> i) & 0xf) {
case 0:
cout << "0000";
break;
case 1:
cout << "0001";
break;
.
.
.
case 0xf:
cout << "1111";
break;
}
}
}
これは課題のように聞こえますが、その場合は本当に先生に助けを求める必要があります. 宿題の解決策をインターネットで求めても、長期的には役に立ちません (プロジェクト管理を行う場合を除きます)。
コメントでchustar(OQ'er)に答えると、それを行う方法、それがどのように/なぜ機能するか、そして将来自分でそれを理解する方法を理解しているなら、そうです、それは良いこと。
しかし、彼が「正しい」とマークした答えは、その議論に嘘をつきます。「Like so」という言葉で始まるコードだけが含まれています。OQ'er が探していたのは説明ではなく、誰かが彼のためにコードを書いてくれることだったことは明らかです。