Convert binary format string to int, in C

前端 未结 7 587
刺人心
刺人心 2020-12-01 21:21

How do I convert a binary string like \"010011101\" to an int, and how do I convert an int, like 5, to a string \"101\" in C?

相关标签:
7条回答
  • 2020-12-01 21:45

    I guess it really depends on some questions about your strings/program. If, for example, you knew your number wouldn't be bigger than 255 (IE you were only using 8 bits or 8 0s/1s), you could create a function where you hand it 8 bits from your string, traverse it and add to a sum that you returned everytime you hit a 1. IE if you hit the bit for 2^7 add 128 and the next bit you hit was 2^4 add 16.

    This is my quick and dirty idea. I think more and Google for ya while at school. :D

    0 讨论(0)
  • 2020-12-01 21:54

    If it is a homework problem they probably want you to implement strtol, you would have a loop something like this:

    char* start = &binaryCharArray[0];
    int total = 0;
    while (*start)
    {
     total *= 2;
     if (*start++ == '1') total += 1;
    }
    

    If you wanted to get fancy you could use these in the loop:

       total <<= 1;
       if (*start++ == '1') total^=1;
    
    0 讨论(0)
  • 2020-12-01 22:01

    Use like this:

    char c[20];
    int s=23;
    
    itoa(s,c,2);
    puts(c);
    

    Output:

    10111
    
    0 讨论(0)
  • 2020-12-01 22:01

    To answer the second part of the question.

    char* get_binary_string(uint16_t data, unsigned char sixteen_bit)
    {
        char* ret = NULL;
        if(sixteen_bit) ret = (char*)malloc(sizeof(char) * 17);
        else ret = (char*)malloc(sizeof(char) * 9);
        if(ret == NULL) return NULL;
    
        if(sixteen_bit){
            for(int8_t i = 15; i >= 0; i--){
                *(ret + i) = (char)((data & 1) + '0');
                data >>= 1;
            }
            *(ret + 16) = '\0';
            return ret;
        }else{
            for(int8_t i = 7; i >= 0; i--){
                *(ret + i) = (char)((data & 1) + '0');
                data >>= 1;
            }
            *(ret + 8) = '\0';
            return ret;
        }
        return ret;
    }
    
    0 讨论(0)
  • 2020-12-01 22:02

    You can use the following coding

    #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;
    }
    
    0 讨论(0)
  • 2020-12-01 22:09

    For the 2nd part of the question, i.e. "how do I convert an int, like 5, to a string "101" in C?", try something like:

    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;
      }
    }
    
    0 讨论(0)
提交回复
热议问题