我正在編寫一個程序,將一個句子編碼成二進制文件,方法是將用戶輸入的每個單獨字符轉換爲二進制數字值,用於表示ASCII中的該字符。我似乎無法想到將字符串轉換爲更好的方法,所以我想知道是否可以將用戶輸入存儲爲字符數組。例如,如果用戶進入世界「Apple」,是否有可能將每個單獨的字母存儲爲字符?是否可以將用戶輸入的單詞存儲爲字符數組?
編輯:我忘了提及,我將二進制數值1010101等字轉換後。我必須把二進制數值變成0和1的隨機字符串,並將其顯示在屏幕上。
我正在編寫一個程序,將一個句子編碼成二進制文件,方法是將用戶輸入的每個單獨字符轉換爲二進制數字值,用於表示ASCII中的該字符。我似乎無法想到將字符串轉換爲更好的方法,所以我想知道是否可以將用戶輸入存儲爲字符數組。例如,如果用戶進入世界「Apple」,是否有可能將每個單獨的字母存儲爲字符?是否可以將用戶輸入的單詞存儲爲字符數組?
編輯:我忘了提及,我將二進制數值1010101等字轉換後。我必須把二進制數值變成0和1的隨機字符串,並將其顯示在屏幕上。
這裏是我的一個老的回答,處理整數轉換爲二進制:How to manipulate and represent binary numbers in C++
大多數情況下,人們寫循環來創建這些字符串每次一個位,但它是一個有點毫無意義(除了是一個鍛鍊在按位操作中)。
std::string StringToBinary(const string & s)
{
static const char lookup[16][5] = {
"0000", "0001", "0010", "0011", 0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", 1100", "1101", "1110", "1111"
};
std::string bin;
bin.reserve(s.size()*8);
for(i = 0; i < s.size(); i++) {
bin.append(lookup[(unsigned char)s[i] >> 4], 4);
bin.append(lookup[(unsigned char)s[i] & 0x0f], 4);
}
return bin;
}
這需要高階半字節和(s[i]>>4
)和低位:如果你適應上述單字符我的回答,您可以使用代表半個字節查找表手工做的緊湊nybble(s[i]&0x0f
)並將其轉換爲4位字符串。如果你願意,你可以使用一個8位查找表,但你想編寫一個小程序來生成代碼(或動態生成它)。
上述解決方案比較容易,不需要大量的按位操作。
聽起來像你只是想索引字符串。 – chris
你是什麼意思? – user2419691
不會'std :: string'或'char []'工作嗎? – 0x499602D2