我正在開始C++類,並希望在十六進制表示和二進制之間轉換字母。我可以設法打印出十六進制數字使用:如何將十六進制數字轉換爲C++中的二進制文件?
for(char c = 'a'; c <= 'z'; c++){
cout << hex << (int)c;
}
但我不能這樣做的二進制。沒有std::bin
,我可以用來將十進制數轉換爲二進制。
我正在開始C++類,並希望在十六進制表示和二進制之間轉換字母。我可以設法打印出十六進制數字使用:如何將十六進制數字轉換爲C++中的二進制文件?
for(char c = 'a'; c <= 'z'; c++){
cout << hex << (int)c;
}
但我不能這樣做的二進制。沒有std::bin
,我可以用來將十進制數轉換爲二進制。
像這樣:
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;
}
我從來不知道這個!這正是OP想要的,我自己也學到了一些新東西。給予好評! – 2009-01-27 14:50:25
在C++中沒有二進制io操縱器。您需要手動執行覆蓋,可能通過使用bitshift運算符。實際的轉換不是一個困難的任務,所以應該在C++初學者的能力範圍內(而不包括在標準庫中的事實可能不是:))
編輯:許多其他人已經把所以我打算給我的首選方法
void OutputBinary(std::ostream& out, char character)
{
for (int i = sizeof(character) - 1; i >= 0; --i)
{
out << (character >> i) & 1;
}
}
這也可能被模板化爲任何數字類型。
並在這裏再sizeof(字符)??你們是否從int的例子中得到了這個結論? – AndreasT 2010-01-26 12:21:40
對於各種各樣,你也可以使用16元素查找表。
剛剛意識到我做了一個可怕的雙關語對不起:對不起:P – freespace 2009-01-27 14:42:14
*呻吟* 是的,可怕的雙關語。 – 2009-01-27 14:48:33
你可以做這樣的事情:與十六進制charachters了他們的二進制 '啃'
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;
}
}
}
你可以隨便寫一個映射:
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";
};
這個版本應該使用查找表完成。原始代碼需要一個字符的事實也會令人困惑。 – 2009-01-27 14:49:38
這聽起來像一個任務,在這種情況下,你真的應該問你的老師的幫助。從互聯網尋求家庭作業的解決方案從長遠來看並不能真正幫助你(除非你正在進行項目管理)。
在評論中回答chustar(OQ'er)時,我不得不同意,如果你明白怎麼做,如何/爲什麼會有效,以及如何在將來自己弄清楚,那麼是的這將是一件好事。
但是,他標記爲「正確」的答案對該論點置之不顧。它只包含代碼,前面加上「Like so」等字樣。這很清楚,OQ'er尋找的是而不是作爲解釋,但有人爲他寫了他的代碼。
我建議你向我們展示一個示例輸入/輸出。 – xtofl 2009-01-27 14:40:37