Mam NSString z ciągiem szesnastkowym jak "68656C6C6F", co oznacza "cześć".Jak przekonwertować HEX na NSString w Objective-C?
Teraz chcę przekonwertować ciąg szesnastkowy na inny obiekt NSString, który pokazuje "cześć". Jak to zrobić ?
Mam NSString z ciągiem szesnastkowym jak "68656C6C6F", co oznacza "cześć".Jak przekonwertować HEX na NSString w Objective-C?
Teraz chcę przekonwertować ciąg szesnastkowy na inny obiekt NSString, który pokazuje "cześć". Jak to zrobić ?
Jestem pewien, że istnieją o wiele lepsze, sprytniejsze sposoby, aby to zrobić, ale to rozwiązanie faktycznie działa.
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;
}
+(NSString*)intToHexString:(NSInteger)value
{
return [[NSString alloc] initWithFormat:@"%lX", value];
}
Czy należy wprowadzić "68656C6C6F" do wartości argumentu? Myślę też, że twoje rozwiązanie nie jest poprawne. – user403015
Nie tylko nie jest to prawidłowe, ale również łamie zasadę własności. Zadowolony system do debugowania/usuwania nieszczelności. – JustSid
Myślę, że jest to najlepsza odpowiedź, dodałem więcej przykładowego kodu w odpowiedzi z dołu poniżej. – dancl
ten powinien zrobić:
- (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;
}
[hex UTF8String] powinno być [hex cStringUsingEncoding: NSASCIIStringEncoding] jeśli jest hexem to ASCII – valexa
Myślę, że ludzie doradzanie initWithFormat jest najlepszą odpowiedź, jak to objective-c zamiast mieszanką ObjC, C .. (chociaż przykładowy kod jest nieco lakoniczny) .. zrobiłem następujące
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];
}
celu wyjaśnienia, to ciąg hex NSString lub liczbą całkowitą? Myślę, że niektórzy z twoich odbierających mogą być zdezorientowani. – nil
Szesnastkowy łańcuch to NSString i chcę go przekonwertować na inny NSString, który reprezentuje "cześć". – user403015
Dobrze, zaktualizuj swoje pytanie tymi informacjami, aby nikt inny nie zrobił tego samego błędu ponownie. – nil