2011-06-21 3 views
6

私は "hello"を意味する "68656C6C6F"のような16進文字列のNSStringを持っています。Objective-CでHEXをNSStringに変換するには?

ここで、16進文字列を "hello"を示す別のNSStringオブジェクトに変換したいとします。どうやってするか ?

+0

明確にするために、16進文字列はNSStringか整数ですか?あなたの回答者の中には、それについて混乱するかもしれないと思います。 – nil

+0

16進数の文字列はNSStringであり、 "hello"を表す別のNSStringに変換したいのです – user403015

+0

その情報で質問を更新し、他の誰も同じミスを再度起こさないようにします。 – nil

答えて

19

私は確かにこれを行うにははるかに良い、より洗練された方法がありますが、この解決策は実際に動作します。

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"を入力してください。また、あなたの解決策は正しくないと思います。 – user403015

+6

それは正しくないだけでなく、所有権ルールも破ります。ハッピーデバッグ/リーク修正。 – JustSid

+0

これは最善の答えだと思うが、答えのサンプルコードを追加しました。 – dancl

3

これはそれを行う必要があります。

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

16進数の場合は[hex UTF8String]は[hex cStringUsingEncoding:NSASCIIStringEncoding]にする必要があります – valexa

-1

サンプルコードですが、私は(..それはむしろにObjC、Cのミックスより客観-CだとしてinitWithFormatを助言の人々が最良の答えだと思います私は以下をしました

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]; 
} 
関連する問題