我正在开发一个程序,通过将用户输入的每个单独字符转换为用于表示ASCII中该字符的二进制数字值,将句子编码为二进制文件。我似乎无法想到将字符串转换为更好的方法,所以我想知道我是否可以将用户输入存储为字符数组。例如,如果用户进入世界“Apple”,是否可以将每个字母存储为字符?
编辑:我忘记提到我在二进制数值1010101等中转换单词后。我必须将二进制数值放入0和1的随机字符串中并将其显示在屏幕上。
答案 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;
}
这将获取高阶nybble和(s[i]>>4
)以及低阶nybble(s[i]&0x0f
)并将每个转换为4位字符串。如果需要,可以使用8位查找表,但是您想编写一个小程序来生成代码(或动态生成代码)。
上述解决方案更容易,无需进行大量按位操作。