如何将二进制字符串(如“010011101”)转换为int,如何将int(如5)转换为C中的字符串“101”?
答案 0 :(得分:20)
标准库中的strtol
函数采用“base”参数,在本例中为2。
int fromBinary(const char *s) {
return (int) strtol(s, NULL, 2);
}
(我在大约8年写的第一个C代码: - )
答案 1 :(得分:12)
如果是家庭作业问题,他们可能希望你实施strtol
,你会得到这样的循环:
char* start = &binaryCharArray[0];
int total = 0;
while (*start)
{
total *= 2;
if (*start++ == '1') total += 1;
}
如果你想获得幻想,你可以在循环中使用它们:
total <<= 1;
if (*start++ == '1') total^=1;
答案 2 :(得分:0)
我想这真的取决于你的字符串/程序的一些问题。例如,如果您知道您的数字不会大于255(IE只使用8位或8 0/1),您可以创建一个函数,您可以将其从字符串中移取8位,遍历并添加每次你点击1时返回的总和。如果你点击2 ^ 7加上128,你点击的下一位是2 ^ 4加16。
这是我快速而肮脏的想法。在学校里,我想更多和谷歌一样。 :d
答案 3 :(得分:0)
对于问题的第二部分,即“如何将int(如5)转换为C中的字符串”101“,请尝试以下方法:
void
ltostr( unsigned long x, char * s, size_t n )
{
assert( s );
assert( n > 0 );
memset( s, 0, n );
int pos = n - 2;
while( x && (pos >= 0) )
{
s[ pos-- ] = (x & 0x1) ? '1' : '0'; // Check LSb of x
x >>= 1;
}
}
答案 4 :(得分:0)
您可以使用以下编码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void)
{
int nRC = 0;
int nCurVal = 1;
int sum = 0;
char inputArray[9];
memset(inputArray,0,9);
scanf("%s", inputArray);
// now walk the array:
int nPos = strlen(inputArray)-1;
while(nPos >= 0)
{
if( inputArray[nPos] == '1')
{
sum += nCurVal;
}
--nPos;
nCurVal *= 2;
}
printf( "%s converted to decimal is %d\n", inputArray, sum);
return nRC;
}
答案 5 :(得分:0)
像这样使用:
char c[20];
int s=23;
itoa(s,c,2);
puts(c);
输出:
10111