我正在开发一个程序,该程序通过将用户输入的每个单独字符转换为用于在 ASCII 中表示该字符的二进制数值来将句子编码为二进制文件。我似乎想不出更好的方法将字符串转换成字符串,所以我想知道是否可以将用户输入存储为字符数组。例如,如果用户输入世界“Apple”,是否可以将每个单独的字母存储为一个字符?
编辑:我忘了提到,在将单词转换为二进制数值 1010101 等之后。我必须将二进制数值放入 0 和 1 的随机字符串并将其显示到屏幕上。
我正在开发一个程序,该程序通过将用户输入的每个单独字符转换为用于在 ASCII 中表示该字符的二进制数值来将句子编码为二进制文件。我似乎想不出更好的方法将字符串转换成字符串,所以我想知道是否可以将用户输入存储为字符数组。例如,如果用户输入世界“Apple”,是否可以将每个单独的字母存储为一个字符?
编辑:我忘了提到,在将单词转换为二进制数值 1010101 等之后。我必须将二进制数值放入 0 和 1 的随机字符串并将其显示到屏幕上。
这是我的一个旧答案,处理将整数转换为二进制:如何在 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 位查找表,但您需要编写一个小程序来生成代码(或动态生成)。
上面的解决方案更简单,不涉及大量的按位运算。