在C语言中将二进制字符串转换为int
我正在用C语言将一个二进制字符串转换为int。我编写了一个代码,它可以编译,但它没有达到我想要的效果,这就是将一个16位二进制字符串转换为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;
#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