Je voudrais savoir comment analyser une chaîne hexadécimale, représentant un nombre, en Objective-C. Je suis prêt à utiliser à la fois une méthode objective ou une méthode basée sur C, c'est bien.
exemple:
#01FFFFAB
devrait analyser le nombre entier: 33554347
Toute aide serait appréciée!
0x
(ou0X
). NSScanner acceptera ces préfixes.vous pouvez utiliser NSScanner pour cela
outVal
contiendra l'int que vous recherchez. Le 0x est facultatif.la source
strtol () est votre ami.
Il convertit une chaîne en un long, et vous pouvez passer la base du nombre en. Supprimez d'abord cette # signature ou passez à strtol un pointeur vers le premier caractère numérique.
la source
strtol
fonction est également beaucoup plus clémente. Écrivez des tests unitaires approfondis (incluez des espaces, des caractères non hexadécimaux, etc.) car vous trouverez des cas extrêmes surprenants quiNSScanner
vous donnent plus de contrôle.Vous pouvez utiliser la ligne ci-dessous pour la conversion. C'est juste un code de ligne:
Bon codage !!!
la source
0x
(ou0X
) ou +/- ou tout autre caractère qui n'est pas considéré comme valide dans votre entrée.La bibliothèque standard Swift 4 a introduit un nouvel initialiseur pour analyser tous les types d'entiers. Il faut une chaîne pour analyser avec radix (c'est-à-dire base) et retourne un entier facultatif:
la source
Selon Apple:
Donc, si tu as
NSData
obj, tu peux faire ensuitela source
0x
(ou0X
) ou tout autre caractère qui n'est pas considéré comme valide dans votre entrée, mais qui est accepté par NSScanner.Pour Swift 3:
la source