Convertir le contenu d'un objet NSString en représenation Hexa
remooz
Membre
Voici mon problème.
Je dispose d'un UITextField dont le contenu est récupéré dans un objet NSString.
Je souhaite que cette valeur récupérée soit directement une réprésentation hexadécimale et pas une conversion dans la table ASCII.
Par exemple si je tape "F". Je voudrais obtenir "0x0F" et pas "46" (valeur hexa dans la table ASCII).
Merci par avance.
Je dispose d'un UITextField dont le contenu est récupéré dans un objet NSString.
Je souhaite que cette valeur récupérée soit directement une réprésentation hexadécimale et pas une conversion dans la table ASCII.
Par exemple si je tape "F". Je voudrais obtenir "0x0F" et pas "46" (valeur hexa dans la table ASCII).
Merci par avance.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
#include <stdio.h>
int main(void) {
char string[]="AF08";
int N;
sscanf(string,"%x",&N);
sprintf(string,"%4x",N);
puts(string);
return 0;
}
....
Mais il me retourne la valeur décimale du caractère entré.
int N;
sscanf(c_buffer,"%x",&N);Â Â // Le format %x lit le texte comme un hexa, et l'affecte à N
NSString * newString=[NSString stringWithFormat:@%x,N];
ma string peut ressembler aussi bien à "FF" ou encore à "100FAEB59A".
Un unsigned short se code sur 2 octets. Ainsi en aucun cas ton mot uc_buffer ne peut dépasser 4 caractères hexadécimaux. L'hypothèse du mot "100FAEB59A" n'est donc acceptable qu'en ne prenant que les 4 premiers caractères de ce mot au maximum.
Question
Tu rentres une chaà®ne de longueur quelconque uc_buffer,
Tu te donnes un entier ui_length≤4
Tu veux pouvoir lire les ui_length premiers caractères comme le code hexa d'un unsigned short.
C'est ça ?
concernant ui_length. Je cherche à calculer la taille de mon tableau uc_buffer.
ben
ui_length=strlen(uc_buffer)
Ce que je veux c'est que quand je tape "FF" dans mon champ de texte j'ai en mémoire 0xFF et pas le valeur hexa du caractère "F".
Tu veux donc remplacer 'F' par 'F' - 'A'+10, '9' par '9'-'0', 'b' par 'b'-'a'+10.
Pour cela il faut faire une boucle sur tous les caractères de uc_buffer, et leur appliquer le traitement de translation ci-dessus.
Ceci dit si après tu veux les regrouper en lecture deux par deux (lire en short), il faut tenir compte de l'endianness, et par exemple faire une interversion d'octet tous les 2 caractères.
Par contre je ne vois vraiment pas ce que tu veux en faire ...
{
unsigned nbOctets = [inst2 length];
unsigned donneesHEXA;
NSScanner *scan;
int i, okHex;
for(i=0; i < nbOctets; i++)
{
scan=[NSScanner scannerWithString:[inst2 substringWithRange:NSMakeRange(i,1)]];
okHex=[scan scanHexInt:&donneesHEXA];
if (okHex == 0) return @\nERREUR: Caractère pas hexa;
}
for(i=0; i < nbOctets/2; i++)
{
scan=[NSScanner scannerWithString:[inst2 substringWithRange:NSMakeRange(i*2,2)]];
okHex=okHex+[scan scanHexInt:&donneesHEXA];
envoye_buf[5+i] = (unsigned char) (donneesHEXA);
}
Les 10 octets "AF0812BC1A"  deviennent 5 octets 0xAF 0x08 0x12 0xBC 0x1A
voici de quoi faire :
% pgm
175 codé par l'octet 0xaf
8 codé par l'octet 0x8
18 codé par l'octet 0x12
188 codé par l'octet 0xbc
26 codé par l'octet 0x1a
%
Pour une fois que NSScanner est utile.
Mais heu je suis pas sûr que ça colle avec ce qui est demandé, si ? Je pensais que c'était le sens inverse...