2009-03-17 8 views
13

मैं एनएसआईएनटेगर को परिवर्तित करने का तरीका जानने का प्रयास कर रहा हूं, 56 कहें, एनएसएसटींग को मूल (int) मान का द्विआधारी प्रतिनिधित्व है। शायद कोई एक प्रारूपण तकनीक जानता है जो 56 स्वीकार कर सकता है और उद्देश्य सी के भीतर "111000" वापस कर सकता है।NSInteger को बाइनरी (स्ट्रिंग) मान में कनवर्ट करने के लिए कैसे करें

उत्तर

26

ऐसा करने के लिए कोई अंतर्निहित स्वरूपण ऑपरेटर नहीं है। आप इसे एक हेक्साडेसिमल स्ट्रिंग के लिए कनवर्ट करने के लिए करना चाहता था, तो आप कर सकता है:

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

आप उन पीले त्रुटियों में से एक है अगर आप ऐसा नहीं करते हैं 'NSMutableString * str = [NSMutableString stringWithFormat मिल : @ ""]; ' –

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

क्या इनपुट शून्य है? – epatel

+0

यह इनपुट विफल रहता है यदि (0 वास्तव में यदि अंतिम बिट 0 है), और यह एन स्ट्रिंग ऑब्जेक्ट्स को आवंटित और हटा देता है, जहां संख्या संख्या में बिट्स की संख्या है। बहुत कुशल नहीं है। –

+0

इसलिए मोटे तौर पर। लेकिन अच्छी पकड़ है। –

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

मैं एडम Rosenfield के संस्करण से शुरू कर दिया है, और करने के लिए संशोधित:

  • बाइट्स के बीच खाली स्थान
  • संभाल पर हस्ताक्षर किए पूर्णांक

नमूना उत्पादन:

-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 
संबंधित मुद्दे