2009-03-17 46 views

Trả lời

26

Không có toán tử định dạng được tích hợp để thực hiện điều đó. Nếu bạn muốn chuyển đổi nó thành một chuỗi thập lục phân, bạn có thể làm:

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

Để chuyển đổi nó thành một chuỗi nhị phân, bạn sẽ phải xây dựng nó cho mình:

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

Bạn nhận được một trong những lỗi màu vàng nếu bạn không làm 'NSMutableString * str = [NSMutableString stringWithFormat : @ ""]; ' –

4

Gần:

-(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

Nếu đầu vào bằng 0 thì sao? – epatel

+0

Điều này không thành công nếu đầu vào là 0 (hoặc trong thực tế nếu bit cuối cùng là 0), và nó cũng phân bổ và deallocates N đối tượng chuỗi, trong đó N là số bit trong số. Không hiệu quả lắm. –

+0

Do đó gần đúng. Nhưng bắt tốt. –

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

tôi bắt đầu từ phiên bản Adam Rosenfield, và sửa đổi để:

  • thêm khoảng trống giữa byte
  • xử lý ký số nguyên

Mẫu đầu ra:

-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 
Các vấn đề liên quan