Как конвертировать NSInteger в двоичное (строковое) значение - PullRequest
13 голосов
/ 17 марта 2009

Я пытаюсь выяснить, как преобразовать NSInteger, скажем, 56, в строку NSString, которая является двоичным представлением исходного (int) значения. Возможно, кто-то знает методику форматирования, которая может принять 56 и вернуть «111000» в Objective C. Спасибо всем.

Ответы [ 3 ]

26 голосов
/ 17 марта 2009

Для этого нет встроенного оператора форматирования. Если вы хотите преобразовать его в шестнадцатеричную строку, вы можете сделать:

NSString *str = [NSString stringWithFormat:@"%x", theNumber];

Чтобы преобразовать ее в двоичную строку, вам придется создать ее самостоятельно:

NSMutableString *str = [NSMutableString stringWithFormat:@""];
for(NSInteger numberCopy = theNumber; numberCopy > 0; numberCopy >>= 1)
{
    // Prepend "0" or "1", depending on the bit
    [str insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
}
20 голосов
/ 09 декабря 2010
NSString * binaryStringFromInteger( int number )
{
    NSMutableString * string = [[NSMutableString alloc] init];

    int spacing = pow( 2, 3 );
    int width = ( sizeof( number ) ) * spacing;
    int binaryDigit = 0;
    int integer = number;

    while( binaryDigit < width )
    {
        binaryDigit++;

        [string insertString:( (integer & 1) ? @"1" : @"0" )atIndex:0];

        if( binaryDigit % spacing == 0 && binaryDigit != width )
        {
            [string insertString:@" " atIndex:0];
        }

        integer = integer >> 1;
    }

    return string;
}

Я начал с версии Адама Розенфилда и изменил на:

  • добавить пробелы между байтами
  • обрабатывать целые числа со знаком

Пример вывода:

-7            11111111 11111111 11111111 11111001
7             00000000 00000000 00000000 00000111
-1            11111111 11111111 11111111 11111111
2147483647    01111111 11111111 11111111 11111111
-2147483648   10000000 00000000 00000000 00000000
0             00000000 00000000 00000000 00000000
2             00000000 00000000 00000000 00000010
-2            11111111 11111111 11111111 11111110
4 голосов
/ 17 марта 2009

Грубо:

-(void)someFunction
{
  NSLog([self toBinary:input]);
}

-(NSString *)toBinary:(NSInteger)input
{
  if (input == 1 || input == 0) {
    return [NSString stringWithFormat:@"%d", input];
  }
  else {
    return [NSString stringWithFormat:@"%@%d", [self toBinary:input / 2], input % 2];
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...