2011-06-21 23 views
6

"Merhaba" anlamına gelen "68656C6C6F" gibi altıgen bir dizeyle NSString var.HEX-NSString Objective-C nasıl dönüştürülür?

Şimdi altıgen dizeyi "merhaba" gösteren başka bir NSString nesnesine dönüştürmek istiyorum. Bu nasıl yapılır ?

+0

Netleştirmek için, hex dizgisi bir NSString veya bir tamsayıdır? Bazı cevaplayıcıların bunun hakkında kafasının karışmış olabileceğini düşünüyorum. – nil

+0

Onaltılık dize bir NSString'dir ve ben onu "merhaba" temsil eden başka bir NSString'e dönüştürmek istiyorum – user403015

+0

Eh, sorunuzu bu bilgilerle güncelleyin, böylece kimse aynı hatayı tekrar yapmaz. – nil

cevap

19

Bunu yapmak için çok daha iyi ve akıllı yollar olduğundan eminim, ancak bu çözüm gerçekten işe yarıyor.

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

"68656C6C6F" parametresini argüman değerine mi girmeliyim? Ayrıca çözümün doğru olmadığını düşünüyorum. – user403015

+6

Sadece bu doğru değil, aynı zamanda sahiplik kuralını bozuyor. Mutlu hata ayıklama/sızıntı sabitleme. – JustSid

+0

Bence bu en iyi cevaptır, daha fazla örnek kod ekledim – dancl

3

Bu yapmalıyım:

- (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], altıgen ise [hex cStringUsingEncoding: NSASCIIStringEncoding] olmalıdır ASCII – valexa

-1

örnek kod rağmen (.. insanlar oldukça objc, C karışımı daha objektif-C var olarak initWithFormat iyi cevaptır danışmanlık düşünüyorum bir bit ...) Aşağıdaki açıklamaları yaptım:

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]; 
} 
İlgili konular