在C中将二进制字符串转换为int

时间:2016-03-25 23:53:36

标签: c string binary int

我将二进制字符串转换为C中的int。我编写了一个代码并编译但是它没有按照我想要的方式执行,即将16位二进制字符串转换为INT。这是我的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main() {

        char input[16];
        int result;
        char c;
        int i;
        i = 0;
        int count = 0;
        int a = 1;

        puts("Enter a 16-bit binary value to return its integer value");
        while((c = getchar()) != '\n') {
            input[i++];
        }

        for(count = strlen(input) - 1; count >=0; count--)
        {
            if(input[count] == '1')
            {
                result += a;
            }
            a <<= 1;
        }
        printf("The binary %s is integer %d", input, result);

        return 0;

    }

当我运行它时,它要求我输入一个16位二进制值。如果我输入&#34; 0000000000000010&#34;它打印&#34;二进制@@是整数2007885296&#34;而不是2.我做错了什么?

我通过PuTTY.exe在Linux服务器上编译和运行此代码,并且我在vi中编辑此代码,不确定这是否有所不同。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您忘了初始化result,也不需要变量a

result=0;

for(count=0,len=strlen(input); count<len; count++)
    {
        result<<=1;
        if(input[count] == '1')
        {
            result += 1;
        }

    }

答案 1 :(得分:0)

以下代码干净地编译,正常工作,但不执行用户输入仅为0和1的验证。

#include <stdio.h>

#define BINARY_LEN (16)

int main( void )
{

    char input[ BINARY_LEN+1 ] = {'\0'};
    int c;
    int i=0;

    puts("Enter a 16-bit binary value to return its integer value\n");

    // EDIT2: increase length to allow for trailing NUL byte
    for( ; i<BINARY_LEN; i++)
    {
        if( (c = getchar()) != EOF && '\n' != c)
        {
            input[i] = (char)c;
        }

        else
        {
            break;
        }
    }

    int result = 0;
    for( int j=0; j<i; j++ )
    {
        // EDIT1: move shift statement to create proper result
        result <<= 1;

        if(input[j] == '1')
        {
            result |= 1;
        }   
    }

    printf("The binary %s is integer %d", input, result);

    return 0;

}

这是代码的示例运行:

Enter a 16-bit binary value to return its integer value

101
The binary 101 is integer 5

Enter a 16-bit binary value to return its integer value

11000
The binary 11000 is integer 24

答案 2 :(得分:-1)

输入没有空终止符。您是从键盘上读取的,但最后不要添加空值。

puts("Enter a 16-bit binary value to return its integer value");
while((c = getchar()) != '\n') {
    input[i++];
}
input[i] = 0; // Add this. 

并输入[17],这样你就有了一个空位