使用C中的按位运算和指针运算的二进制到无符号int

时间:2012-07-03 12:20:30

标签: c binary bit-manipulation

我只能使用按位运算和指针运算来解决这个问题。我正在从二进制转换为unsigned int。

我写的函数是:

unsigned int atob(const char* nptr);

atob(“101”)应返回5,atob(“11000”)应返回24,atob(“11 $”)应返回3,atop(“”)应返回0.

我对按位操作很新,所以我真的需要一些专门的帮助。

编辑:

nptr只能递增,而不允许其他inc / dec。

3 个答案:

答案 0 :(得分:2)

unsigned bits2val(char *bits)
{
    unsigned val;

    for (val = 0; *bits; bits++) {
        if (*bits == '1') 
            val = (val << 1) | 1;
        else if (*bits == '0' ) 
            val <<= 1;
        else 
            break;
    }

    return val;
}

答案 1 :(得分:1)

这是我的示例实现,只使用shift和ors(假设您可以使用++进行字符串操作):

unsigned atob(const char *input)
{
    unsigned result = 0;
    unsigned currentBit = 0;

    // we need to go right to left;
    const char *end = input;
    // make sure we only read '0's and '1's
    while ((*end == '0') || (*end == '1'))
    {
        end++;
    }

    while (--end >= input) {
        // check for overflow
        if ((currentBit >> 3) > sizeof(result))
            break;

        char isCurrentBitSet = *end == '1';
        unsigned setValue = (isCurrentBitSet << currentBit);
        result |= setValue;

        currentBit++;
    }

    return result;
}

答案 2 :(得分:0)