Étant donné que votre texte est hexadécimal et que vous voulez octets réels sur (qui correspondent chacun à deux caractères hexadécimaux), vous devrez convertir manuellement chaque caractère dans le nombre correspondant, puis les ajouter ensemble dans la bonne valeur numérique. Pour cela, je profite du fait que, en caractères ASCII, a ... z sont alignés, tout comme 0 ... 9. Je profite également du fait que l'hexadécimal est ASCII valide, et que les caractères Unicode de 0 à 127 sont identiques à leurs caractères ASCII correspondants.
Voici un programme qui fait cela et imprime les caractères de chaîne d'origine ainsi que les octets calculés (comme hex à nouveau):
#import <Foundation/Foundation.h>
int main(int argc, char *argv[])
{
@autoreleasepool
{
NSString *hexStr = @"1234567890abcdef12";
unsigned char theBytes[9] = {};
for(NSUInteger x = 0; x < sizeof(theBytes); x++)
{
unsigned char digitOne = [hexStr characterAtIndex: x * 2];
if(digitOne >= 'a')
digitOne -= 'a' -10;
else
digitOne -= '0';
unsigned char digitTwo = [hexStr characterAtIndex: (x * 2) +1];
if(digitTwo >= 'a')
digitTwo -= 'a' -10;
else
digitTwo -= '0';
printf("%01x%01x",digitOne,digitTwo);
theBytes[x] = (digitOne << 4) | digitTwo;
}
printf("\n");
for(int x = 0; x < sizeof(theBytes); x++)
printf("%02x",theBytes[x]);
printf("\n");
}
}
Note: Ce code suppose ingénument que vous fournissez une chaîne correcte . C'est à dire. votre entrée doit se composer de caractères minuscules et de chiffres seulement, et exactement 18 caractères. Rien d'autre et vous obtenez un mauvais résultat ou une exception.
cochez cette case http://stackoverflow.com/questions/11087031/how-to-convert-an-initwithbytes-nsstring-to-unsigned-char?rq=1 – iOS
Vous souhaitez obtenir des octets char ou char individuels? –
@MianShahbazAkram Dans mon exemple Chaîne, je voudrais que "AA" donne le résultat "0xAA" comme un octet que je peux passer dans mon tableau char. – fraxool