组合位 - 将字符组合到整数C ++

时间:2015-04-21 01:06:57

标签: c++

我知道如何使文件的标题更有效(对于赋值)但我想知道我是否可以执行实现。

是否可以从文件读取24位然后将其放入整数并保持其值?

我们说我有:

00000000 00000001 00000000 = 256

我可以从文件中读取它,将其分成三个字符,然后将这些字符组合成一个整数,以保留值256吗?这样最终结果将是:

00000000 00000000 00000001 00000000 = 256

3 个答案:

答案 0 :(得分:0)

unsigned char a, b, c;
if (f >> std::noskipws >> a >> b >> c)
{
    int n = a * 256 * 256 + b * 256 + c;
    // use n...
}
else
    std::cerr << "unable to read 3 characters from file\n";

答案 1 :(得分:0)

试试这个:

int combine_chars(char a, char b, char c) {
    char arr[4] = {c, b, a, '\0'};
    return *(int *)arr;
}

这假设整数的小端表示,这意味着最低有效字节具有最小的索引。基本上该函数创建一个包含尾随0的3个字符的数组(因为最重要的字节是'\0',或者最重要的8位是0)。最低有效字节为c,然后由于示例中的第二个最低有效字节为1,因此1 << 8变为256。内存中的数组是:

c b a '\0'

然后将其转换为整数指针(int *),然后将其取消引用到整数值并返回。

答案 2 :(得分:-1)

你可以尝试这样的事情:

int getNumberFromStdin() {
    std::string numberStr;
    for (int i = 0; i < 3; ++i) {
        std::string s;
        std::cin >> s;
        numberStr += s;
    }
    int number = 0;
    for (const auto c : numberStr) {
        number = (number << 1) + (c - '0');
    }
    return number;
}