2011-06-21 51 views
6

Tôi có một NSString với chuỗi hex như "68656C6C6F" có nghĩa là "hello".Làm thế nào để chuyển đổi HEX sang NSString trong Objective-C?

Bây giờ tôi muốn chuyển đổi chuỗi hex thành một đối tượng NSString khác hiển thị "hello". Làm thế nào để làm điều đó ?

+0

Để làm rõ, là chuỗi hex một NSString hoặc một số nguyên? Tôi nghĩ một số người trả lời của bạn có thể bị nhầm lẫn về điều đó. – nil

+0

Chuỗi hex là một NSString và tôi muốn chuyển đổi nó thành một NSString khác đại diện cho "hello" – user403015

+0

Vâng, hãy cập nhật câu hỏi của bạn với thông tin đó để không ai khác mắc lỗi tương tự nữa. – nil

Trả lời

19

Tôi chắc chắn có những cách tốt hơn, thông minh hơn để thực hiện việc này, nhưng giải pháp này thực sự hiệu quả.

NSString * str = @"68656C6C6F"; 
NSMutableString * newString = [[[NSMutableString alloc] init] autorelease]; 
int i = 0; 
while (i < [str length]) 
{ 
    NSString * hexChar = [str substringWithRange: NSMakeRange(i, 2)]; 
    int value = 0; 
    sscanf([hexChar cStringUsingEncoding:NSASCIIStringEncoding], "%x", &value); 
    [newString appendFormat:@"%c", (char)value]; 
    i+=2; 
} 
-2
+(NSString*)intToHexString:(NSInteger)value 
{ 
return [[NSString alloc] initWithFormat:@"%lX", value]; 
} 
+0

Tôi có nên nhập "68656C6C6F" vào giá trị đối số không? Ngoài ra tôi nghĩ rằng giải pháp của bạn là không chính xác. – user403015

+6

Không chỉ nó không chính xác mà còn phá vỡ quy tắc quyền sở hữu. Happy debugging/leak fixing. – JustSid

+0

Tôi nghĩ rằng đây là câu trả lời hay nhất, tôi đã thêm nhiều mã mẫu hơn trong câu trả lời xuống – dancl

3

này nên làm điều đó:

- (NSString *)stringFromHexString:(NSString *)hexString { 

    // The hex codes should all be two characters. 
    if (([hexString length] % 2) != 0) 
     return nil; 

    NSMutableString *string = [NSMutableString string]; 

    for (NSInteger i = 0; i < [hexString length]; i += 2) { 

     NSString *hex = [hexString substringWithRange:NSMakeRange(i, 2)]; 
     NSInteger decimalValue = 0; 
     sscanf([hex UTF8String], "%x", &decimalValue); 
     [string appendFormat:@"%c", decimalValue]; 
    } 

    return string; 
} 
+0

[hex UTF8String] phải là [hex cStringUsingEncoding: NSASCIIStringEncoding] nếu hex của nó là ASCII – valexa

-1

Tôi nghĩ rằng mọi người tư vấn cho initWithFormat là câu trả lời tốt nhất vì nó là mục tiêu-C chứ không phải là một kết hợp của ObjC, C .. (mặc dù các mẫu mã là một chút terse) .. Tôi đã làm như sau

unsigned int resInit = 0x1013; 
if (0 != resInit) 
{ 
    NSString *s = [[NSString alloc] initWithFormat:@"Error code 0x%lX", resInit]; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Initialised failed" 
     message:s 
     delegate:nil 
     cancelButtonTitle:@"OK" 
     otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    [s release]; 
} 
Các vấn đề liên quan