是否可以存储用户输入的单词作为字符数组?

时间:2013-05-26 21:42:45

标签: c++ visual-c++ character ascii

我正在开发一个程序,通过将用户输入的每个单独字符转换为用于表示ASCII中该字符的二进制数字值,将句子编码为二进制文件。我似乎无法想到将字符串转换为更好的方法,所以我想知道我是否可以将用户输入存储为字符数组。例如,如果用户进入世界“Apple”,是否可以将每个字母存储为字符?

编辑:我忘记提到我在二进制数值1010101等中转换单词后。我必须将二进制数值放入0和1的随机字符串中并将其显示在屏幕上。

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位查找表,但是您想编写一个小程序来生成代码(或动态生成代码)。

上述解决方案更容易,无需进行大量按位操作。