這裏是我的方法:做一個字符串的0和1爲一個int,到與ASCII字符VAL
static void undo_bitstring(std::string& str) {
for (unsigned i = 0; i < str.length(); i += charbits) {
int ascii_val = 0;
for (unsigned j = 0; j < charbits; j++) {
if (str[i+j] == '1') ascii_val += (int)exp2(charbits-j-1);
}
str[i/charbits] = (char)ascii_val;
}
str.erase(str.begin()+str.size()/charbits,str.end());
}
哪裏,只要你知道,
charbits
被
定義static const size_t charbits = 8 * sizeof(char);
什麼是應該發生的,例如,
std::string str = "01010111";
undo_bitsring(str);
應該改變海峽到
"W"
因爲
0x2^7 + 1x2^6 + 0x2^5 + 1x2^4 + 0x2^3 + 1x2^2 + 1x2^1 + 1x2^0
= 64 + 16 + 4 + 2 + 1
= 87
和
(int)'W' = 87
當然這過程應該爲0的任何字符串和1層的與工作長度是charbit的倍數。例如,
std::string str = "010101110101011101010111";
undo_bitsring(str);
應該改變海峽到
"WWW"
在我已經運行,輸出只是看起來像一堆的,裏面還問號箱測試,表明某種錯誤。
任何想法?
我完全在這個錯誤的第一個地方呢?這是我試圖製作的一些加密/解密算法的一部分。
閱讀關於'std :: bitset'。 –
當我在gcc上編譯並運行它時,它爲我工作。 ''W「'和'」WWW「'示例都有效。 – SirGuy
您的代碼正常工作。檢查你是否在使用你發佈的代碼。還要注意,按照C++標準,8 * sizeof(char)是冗餘的。 sizeof(char)'被標準要求爲'1'。 – DUman