Me gustaría saber cómo analizar una cadena hexadecimal, que representa un número, en Objective-C. Estoy dispuesto a utilizar tanto un método objetivo como uno basado en C, cualquiera de los dos está bien.
ejemplo:
#01FFFFAB
debe analizar en el entero: 33554347
¡Cualquier ayuda sería apreciada!
0x
(o0X
). NSScanner aceptará esos prefijos.puede utilizar NSScanner para esto
outVal
contendrá el int que estás buscando. El 0x es opcional.fuente
strtol () es tu amigo.
Convierte una cadena en una larga, y puede pasar la base del número. Sin embargo, elimine primero el signo # o pase a strtol un puntero al primer carácter numérico.
fuente
strtol
función también es mucho más indulgente. Escriba pruebas unitarias exhaustivas (incluya espacios, caracteres no hexadecimales, etc.) ya que encontrará algunos casos extremos sorprendentes sobre los que tendráNSScanner
más control.Puede utilizar la siguiente línea para la conversión. Es solo un código de línea:
Codificación feliz !!!
fuente
0x
(o0X
) o +/- o cualquier otro carácter que no se considere válido en su entrada.La biblioteca estándar de Swift 4 introdujo un nuevo inicializador para analizar todos los tipos de enteros. Se necesita una cadena para analizar con radix (es decir, base) y devuelve un entero opcional:
fuente
Según Apple:
entonces, si tienes un objetivo,
NSData
puedes hacer lo siguientefuente
0x
(o0X
) o cualquier otro carácter que no se considere válido en su entrada, pero que NSScanner acepta.Para Swift 3:
fuente