2009-03-17 17 views

cevap

26

bunu yapmak için hiçbir yerleşik biçimlendirme operatör var. Eğer onaltılık dizeye dönüştürmek istiyorsa, bunu yapabilirsiniz: bir ikili dizeye dönüştürmek için

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

, bunu kendiniz inşa etmek gerekecek: Kabaca

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]; 
} 
+1

Sen şu sarı hatalardan biri sen 'yapmazsak NSMutableString * str = [NSMutableString stringWithFormat olsun : @ ""]; ' –

4

:

-(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]; 
    } 
} 
+1

Giriş sıfır ise ne olur? – epatel

+0

Bu, giriş 0 (veya son bit 0 ise, 0) olduğunda başarısız olur ve ayrıca N dizesi nesnelerini ayırır ve ayırır, burada N sayıdaki bitlerin sayısıdır. Çok verimli değil. –

+0

Bu yüzden kabaca. Ama iyi yakalayın. –

20
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; 
} 

Adam Rosenfield en sürümden başladı ve modifiye:

  • bayt arasında boşluk eklemek
  • sap işaretlenmiş tam

Örnek çıktı:

-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