0

我正在尝试将一串二进制字符转换为整数值。

例如:“100101101001”我将使用 for 循环将其分成四个段,然后将其存储在数组 [4] 中。但是,每当我使用函数 atoi() 时,我都会遇到一个问题,即如果字符串以“0”开头,它不能正确转换字符串。

一个例子是“1001” = 1001,但如果是 0110,它将被转换为 110,同样对于 0001,它只会出现 1。

这是我制作的代码:

for(i = 0; i < strlen(store); i++)
{
    bits[counter] = store [i];
    counter++;
    if(counter == 4)
    {   
        sscanf(bits, "%d", &testing);
        printf("%d\n", testing);
        counter = 0;
    }       
}
4

2 回答 2

4

atoi()函数仅转换以 10 为底的十进制数。

您可以strtoul()通过指定base参数 2 来转换二进制数。无需“拆分”字符串,当然前导零也无关紧要(因为它们不应该, 00010 2等于 10 2) :

const char *binary = "00010";
unsigned long value;
char *endp = NULL;

value = strtoul(binary, &endp, 2);
if(endp != NULL && *endp == '\0')
  printf("converted binary '%s' to integer %lu\n", binary, value);
于 2013-04-17T09:44:25.113 回答
0

atoi()从 char 数组转换为 int 而不是二进制

您可以使用以下功能

int chartobin(char *s, unsigned int *x) {
    int len = strlen(s), bit;
    *x = 0;
    if(len>32 || len<1) return -1;
    while(*s) {
        bit = (*s++ - '0');
        if((bit&(~1U))!=0) return -1;
        if (bit) *x += (1<<(len-1));
        len--;
    }
    return 0;
}

经过测试,它可以工作

于 2013-04-17T09:44:30.147 回答