Tengo un NSString con cadena hexagonal como "68656C6C6F" que significa "hola".Cómo convertir HEX a NSString en Objective-C?
Ahora quiero convertir la cadena hexadecimal en otro objeto NSString que muestra "hola". Como hacer eso ?
Tengo un NSString con cadena hexagonal como "68656C6C6F" que significa "hola".Cómo convertir HEX a NSString en Objective-C?
Ahora quiero convertir la cadena hexadecimal en otro objeto NSString que muestra "hola". Como hacer eso ?
Estoy seguro de que hay formas mejores y más inteligentes de hacerlo, pero esta solución realmente funciona.
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];
}
¿Debo ingresar "68656C6C6F" en el valor del argumento? También creo que su solución no es correcta. – user403015
No solo no es correcto sino que también rompe la regla de propiedad. Feliz depuración/fijación de fugas. – JustSid
Creo que esta es la mejor respuesta, agregué más código de muestra en una respuesta más abajo – dancl
Esto debe hacerlo:
- (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] debería ser [hex cStringUsingEncoding: NSASCIIStringEncoding] si es hex es ASCII – valexa
Creo que la gente aconsejando initWithFormat es la mejor respuesta, ya que es objetivo-C en lugar de una mezcla de ObjC, C .. (aunque el código de ejemplo es un poco escueto). Hice lo siguiente
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];
}
Para aclarar, ¿la cadena hexadecimal es un NSString o un número entero? Creo que algunos de los que responden pueden estar confundidos al respecto. – nil
La cadena hexadecimal es un NSString, y quiero convertirlo en otro NSString que represente "hola" – user403015
Bueno, actualice su pregunta con esa información para que nadie más vuelva a cometer el mismo error. – nil