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

在C语言中将二进制字符串转换为int,c,string,binary,int,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;

我正在用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;

    }
#包括
#包括
#包括
int main(){
字符输入[16];
int结果;
字符c;
int i;
i=0;
整数计数=0;
INTA=1;
puts(“输入16位二进制值以返回其整数值”);
而((c=getchar())!='\n'){
输入[i++];
}
对于(计数=strlen(输入)-1;计数>=0;计数--)
{
如果(输入[计数]=“1”)
{
结果+=a;
}

输入没有空终止符。您可以从键盘读取它,但不在末尾添加空终止符

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

然后输入[17],这样你就有了空值的位置,你忘记了初始化
结果,也不需要变量
a

result=0;

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

    }
result=0;

对于(count=0,len=strlen(input);count以下代码干净地编译,工作正常,但不验证用户输入仅为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;

}


1)
char-input[16];
-->
char-input[17];
2)
input[i++];
-->
input[i++]=c;
input[i]=0;
在循环之后。3)
int-result;
-->
int-result=0;
@BLUEPIXY,我认为问题确实与变量result有关。我按照您的建议做了,程序总是打印0,而不管我输入的二进制字符串是什么。我只是不确定如何修复它。我认为结果需要在if语句之外可能吗?主要原因是(2)
input[i++];
这不是赋值。关于这一行:
while((c=getchar())!='\n'){
为了避免input[]数组溢出,这一行应该是:
while(我错了,最好的办法就是产生一个16@BLUEPIXY,它是颠倒位顺序的,现在它是固定的。谢谢。你的结果变成了
二进制101是整数10
。而且
11000
(2)是
24
(荒谬的…例如10000(2)是16,1000(2)是8。16+8是24。@BLUEPIXY,这很奇怪,代码工作正常,突然它左移了一次太多。代码现在更正了新代码不正确。现在比以前更糟了。@BLUEPIXY,编辑的一些中间阶段被发布了,我在发布最终代码之前发布注释的摸索手指错误
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