Преобразуйте строку двоичного формата в интервал в C

Как я преобразовываю двоичную строку как "010011101" к интервалу, и как я преобразовываю интервал, как 5, к строке "101" в C?

10
задан Michael Petrotta 26 February 2010 в 16:44
поделиться

5 ответов

Если это домашнее задание, то они, вероятно, хотят, чтобы вы реализовали strtol, у вас будет цикл примерно такой:

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

Если вы хотите пофантазировать, то можете использовать в цикле вот это:

   total <<= 1;
   if (*start++ == '1') total^=1;
12
ответ дан 3 December 2019 в 14:24
поделиться

Функция strtol в стандартной библиотеке принимает параметр "base", который в данном случае будет равен 2.

int fromBinary(const char *s) {
  return (int) strtol(s, NULL, 2);
}

(первый код на C, который я написал примерно за 8 лет :-)

22
ответ дан 3 December 2019 в 14:24
поделиться

Я думаю, что это действительно зависит от некоторых вопросов о ваших строках/программе. Если, например, вы знаете, что ваше число не будет больше 255 (IE вы используете только 8 бит или 8 0s/1s), вы могли бы создать функцию, где вы передаете ей 8 бит из вашей строки, проходите ее и добавляете к сумме, которую вы возвращаете каждый раз, когда вы попадаете в 1. IE если вы попали в бит для 2^7 добавьте 128 и следующий бит, который вы попали был 2^4 добавьте 16.

Это моя быстрая и грязная идея. Я думаю больше и гуглю для вас пока в школе :D

.
0
ответ дан 3 December 2019 в 14:24
поделиться

Для второй части вопроса, т.е. «как мне преобразовать int, например 5, в строку «101» в C? », Попробуйте что-нибудь вроде:

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
ответ дан 3 December 2019 в 14:24
поделиться

Вы можете использовать следующую кодировку

#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
ответ дан 3 December 2019 в 14:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: