2012-03-27 8 views
6

Cómo convertir valor hexadecimal en iconos emoji, tengo una cadena como a continuacióniOS convertir el valor hexadecimal

NSString *myVal = @"1F61E"; 

¿Cómo puedo convertir este texto para mostrarlo como charrcaters emoji?

He encontrado que el valor from this link por favor hágamelo saber, estoy realmente atascado en marcha con este tema

Updated

NSString *utf8String1 = @"1F61E"; 
NSString *a = [self convert:utf8String1]; 
NSLog(@"%@ &&&&&&&&&&&&&&&&&&&&&",a); 


-(NSString*)convert:(NSString*)decoded{ 

    unichar unicodeValue = (unichar) strtol([decoded UTF8String], NULL, 16); 
    char buffer[2]; 
    int len = 1; 

    if (unicodeValue > 127) { 
     buffer[0] = (unicodeValue >> 8) & (1 << 8) - 1; 
     buffer[1] = unicodeValue & (1 << 8) - 1; 
     len = 2; 
    } else { 
     buffer[0] = unicodeValue; 
    } 

    return [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding]; 



} 
+0

Comprobar esta respuesta en SO que explica exactamente esto: http://stackoverflow.com/questions/1775859/how-to-convert-a- unichar-value-to-an-nsstring-in-objective-c –

Respuesta

4

El punto de código que está intentando codificar no cabe en 16 bits. Por lo tanto es necesario utilizar la codificación UTF-32:

NSScanner *scan = [[NSScanner alloc] initWithString:@"1F61E"]; 
unsigned int val; 
[scan scanHexInt:&val]; 
char cc[4]; 
cc[3] = (val >> 0) & 0xFF; 
cc[2] = (val >> 8) & 0xFF; 
cc[1] = (val >> 16) & 0xFF; 
cc[0] = (val >> 24) & 0xFF; 
NSString *s = [[NSString alloc] 
    initWithBytes:cc 
      length:4 
     encoding:NSUTF32StringEncoding]; 
NSLog(@"[%@]", s); 
+0

gracias por la respuesta. ¿Cómo puedo convertir mi variable a este formato 0x00, 0x01, 0cf6, 0x1e? Por favor, hágamelo saber – user198725878

+0

@ user198725878 Por favor, vea mi edición. – dasblinkenlight

+0

Muchas gracias por su ayuda, pls me puede explicar cómo funciona – user198725878

0

El primer paso es convertirlo a su valor numérico :

unichar unicodeValue = (unichar) strtol([input UTF8String], NULL, 16); 

Luego, siguiendo las reglas de th es post:

char buffer[2]; 
int len = 1; 

if (unicodeValue > 127) { 
    buffer[0] = (unicodeValue >> 8) & (1 << 8) - 1; 
    buffer[1] = unicodeValue & (1 << 8) - 1; 
    len = 2; 
} else { 
    buffer[0] = unicodeValue; 
} 

return [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding]; 

Ahora tiene su UTF-8 cadena con formato!

+0

hola, gracias por la respuesta. ¿Este resultado de ese nsstring serían iconos de emoji? o aún tengo que hacer cualquier cosa para que se muestre. pls hágamelo saber – user198725878

+0

@ user198725878 lo siento, no tengo un dispositivo para probar esto, ¡tendría que probarlo usted mismo! –

+0

cuando intenté imprimir el valor nsstring de retorno usando nslog, simplemente me muestra como "(nulo)" por favor hágamelo saber – user198725878

Cuestiones relacionadas