我将二进制字符串转换为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中编辑此代码,不确定这是否有所不同。
感谢您的帮助!
答案 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],这样你就有了一个空位