0

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

我正在编写的功能是:

unsigned int atob(const char* nptr);

atob("101") 应该返回 5,atob("11000") 应该返回 24,atob("11$") 应该返回 3,atop("") 应该返回 0。

我对按位运算很陌生,所以我真的需要一些专门在该领域的帮助。

编辑:

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

4

3 回答 3

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;
}
于 2012-07-03T15:27:11.123 回答
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;
}
于 2012-07-03T12:36:02.987 回答
0

从基础开始http://www.wikihow.com/Convert-from-Decimal-to-Binary

于 2012-07-03T12:23:07.390 回答