NSString (hex) d'octets
Est il une méthode Objective-C qui convertit une chaîne hexadécimale d'octets? Par exemple @"1156FFCD3430AA22"
à un unsigned char array {0x11, 0x56, 0xFF, ...}
.
Vous devez vous connecter pour publier un commentaire.
Est il une méthode Objective-C qui convertit une chaîne hexadécimale d'octets? Par exemple @"1156FFCD3430AA22"
à un unsigned char array {0x11, 0x56, 0xFF, ...}
.
Vous devez vous connecter pour publier un commentaire.
Plus rapide NSString implémentation de la catégorie que je pouvais penser (cocktail de quelques exemples):
Il est près de 8 fois plus rapide que wookay de la solution. NSScanner est assez lent.
errno
à 0 avant d'appelerstrtoul
et de la lecture par la suite.byteChars
taille 3 au lieu de la taille 2?int
comme si c'était un octet (ce qui est impossible selon la norme C), mais il ne superfluously génère beaucoup de sous-chaînes, au lieu de marcher à travers laconst char *
l'on peut obtenir à l'aide deUTF8String
...La
scanHexInt:
et les mêmes méthodes deNSScanner
pourrait être utile de faire ce que vous voulez, mais vous auriez probablement besoin de briser la chaîne, jusqu'en petits morceaux, auquel cas la conversion manuellement peut-être plus simple que d'utiliserNSScanner
.Pas dans la façon dont vous le faites. Vous aurez besoin d'écrire votre propre méthode pour prendre tous les deux des personnages, de les interpréter comme un int, et de les stocker dans un tableau.
Approche modifiée,
Première tentative de Swift 2.2:
Ou, comme une extension de la Chaîne:
C'est un travail continu en cours, mais semble bien fonctionner jusqu'à présent.
D'autres optimisations et une discussion plus approfondie peut être trouvée sur L'Examen Du Code.
Plusieurs solution est renvoyée valeur faux si la chaîne de caractères comme ceci
"DBA"
Les données correctes pour "DBA" chaîne est "\x0D\xBA" (int valeur : 3514)
si vous avez des données n'est pas comme cela "\x0D\xBA" cela signifie que vous avez un mauvais parce que la valeur sera différente, par exemple vous obtenu des données de cette "\xDB\x0A" la valeur int est 56074
Ici est de réécrire la solution: