0

バイナリ文字列を整数値に変換しようとしています。

例: "100101101001" for ループを使用して 4 つのセグメントに分割し、配列 [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 の 10 進数のみを変換します。

strtoul()2 の引数を指定することにより、2 進数の変換に使用できますbase。文字列を「分割」する必要はなく、もちろん先頭のゼロは問題になりません (そうであってはならないので、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 に答える