2011-08-25 41 views
7

Tôi cần phải chuyển đổi một chuỗi hex thành dạng nhị phân trong mục tiêu-c, Ai đó có thể vui lòng hướng dẫn tôi không? Ví dụ: nếu tôi có chuỗi hex 7fefff78, tôi muốn chuyển đổi nó thành 1111111111011111111111101111000?Làm thế nào để chuyển đổi Hex sang nhị phân iphone

BR, Suppi

+0

Duplicate của http://stackoverflow.com/questions/4618403/convert-binary-to-decimal-in-objective-c –

+2

Tôi khá chắc chắn rằng một thì ngược lại, không phải là một trùng lặp. –

+0

@Carl: Bạn đã đúng. –

Trả lời

8

giải pháp đệ quy Nice ...

NSString *hex = @"49cf3e"; 
NSUInteger hexAsInt; 
[[NSScanner scannerWithString:hex] scanHexInt:&hexAsInt]; 
NSString *binary = [NSString stringWithFormat:@"%@", [self toBinary:hexAsInt]]; 

-(NSString *)toBinary:(NSUInteger)input 
{ 
    if (input == 1 || input == 0) 
     return [NSString stringWithFormat:@"%u", input]; 
    return [NSString stringWithFormat:@"%@%u", [self toBinary:input/2], input % 2]; 
} 
2

Đơn giản chỉ cần chuyển đổi mỗi chữ số từng người một: 0 -> 0000, 7 -> 0111, F -> 1111, vv Một bảng tra cứu ít có thể làm điều này rất ngắn gọn.

Vẻ đẹp của căn cứ con số đó là quyền hạn của cơ sở khác :-)

+0

Chuyển đổi thủ công? Mã 16 trường hợp thành một tuyên bố kiểu chuyển đổi? :) –

+1

@ Jonathan: Một bảng tra cứu sẽ đề xuất chính nó chứ không phải là một tuyên bố chuyển đổi. –

+0

Có câu trả lời có lập trình tại câu hỏi trùng lặp này: http://stackoverflow.com/questions/4618403/convert-binary-to-decimal-in-objective-c. –

1

Trong trường hợp bạn cần số không hàng đầu, ví dụ 18 lợi nhuận 00.011.000 thay vì 11000

-(NSString *)toBinary:(NSUInteger)input strLength:(int)length{ 
     if (input == 1 || input == 0){ 

     NSString *str=[NSString stringWithFormat:@"%u", input]; 
      return str; 
     } 
     else { 
      NSString *str=[NSString stringWithFormat:@"%@%u", [self toBinary:input/2 strLength:0], input % 2]; 
      if(length>0){ 
       int reqInt = length * 4; 
       for(int i= [str length];i < reqInt;i++){ 
        str=[NSString stringWithFormat:@"%@%@",@"0",str]; 
       } 
      } 
      return str; 
     } 
} 
NSString *hex = @"58"; 
NSUInteger hexAsInt; 
[[NSScanner scannerWithString:hex] scanHexInt:&hexAsInt]; 
NSString *binary = [NSString stringWithFormat:@"%@", [self toBinary:hexAsInt strLength:[hex length]]]; 
NSLog(@"binario %@",binary); 
0

Tôi đồng ý với câu trả lời của kerrek SB và đã thử điều này. Công việc của tôi dành cho tôi.

+(NSString *)convertBinaryToHex:(NSString *) strBinary 
{ 
    NSString *strResult = @""; 
    NSDictionary *dictBinToHax = [[NSDictionary alloc] initWithObjectsAndKeys: 
            @"0",@"0000", 
            @"1",@"0001", 
            @"2",@"0010", 
            @"3",@"0011", 

            @"4",@"0100", 
            @"5",@"0101", 
            @"6",@"0110", 
            @"7",@"0111", 

            @"8",@"1000", 
            @"9",@"1001", 
            @"A",@"1010", 
            @"B",@"1011", 

            @"C",@"1100", 
            @"D",@"1101", 
            @"E",@"1110", 
            @"F",@"1111", nil]; 

    for (int i = 0;i < [strBinary length]; i+=4) 
    { 
     NSString *strBinaryKey = [strBinary substringWithRange: NSMakeRange(i, 4)]; 
     strResult = [NSString stringWithFormat:@"%@%@",strResult,[dictBinToHax valueForKey:strBinaryKey]]; 
    } 
    return strResult; 
} 
Các vấn đề liên quan