Récupérations de valeurs dans chaîne de caractères
vivitare
Messages postés
109
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'aimerai en c++ récupérer et stocker des valeurs hexadécimales depuis chaîne de caractères dans un tableau.
Exemple :
j'ai une variable de type char lecture[]="A610" , et je voudrai récupérer les valeurs sous la forme char adresse[0]=0xA6 et adresse[1]=0x10 .
Si des informations supplémentaires sont nécessaires, je répondrai dans les plus bref délais.
J'aimerai en c++ récupérer et stocker des valeurs hexadécimales depuis chaîne de caractères dans un tableau.
Exemple :
j'ai une variable de type char lecture[]="A610" , et je voudrai récupérer les valeurs sous la forme char adresse[0]=0xA6 et adresse[1]=0x10 .
Si des informations supplémentaires sont nécessaires, je répondrai dans les plus bref délais.
A voir également:
- Récupérations de valeurs dans chaîne de caractères
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Plus de chaine tv - Guide
- Chaine tnt gratuite sur mobile - Guide
- Exemple de mot de passe à 8 caractères - Guide
1 réponse
Salut vivitare,
Je ne vois pas trop ce que tu voudrais en faire, mais pour faire ce que tu dis, en C, on peut faire comme cela par exemple :
donne compilé et exécuté :
Il faut que ton tableau adresse soit un tableau de char non signés, sinon les valeurs dépassant 127 ne pourront pas être valablement stockées.
Dal
Je ne vois pas trop ce que tu voudrais en faire, mais pour faire ce que tu dis, en C, on peut faire comme cela par exemple :
#include <stdio.h> #include <stdlib.h> int main(void) { char lecture[] = "A610"; unsigned char adresse[2]; long val = strtol(lecture, NULL, 16); adresse[0] = (val >> (8*1)) & 0xFF; adresse[1] = (val >> (8*0)) & 0xFF; printf("val adresse[0] = 0x%02X\n", adresse[0]); printf("val adresse[1] = 0x%02X\n", adresse[1]); return 0; }
donne compilé et exécuté :
$ gcc -Wall 35414647.c $ ./a.out val adresse[0] = 0XA6 val adresse[1] = 0X10 $
Il faut que ton tableau adresse soit un tableau de char non signés, sinon les valeurs dépassant 127 ne pourront pas être valablement stockées.
Dal
ce qui me donne cela :
Explications disponibles ici : ICI
Merci d'y penser dans tes prochains messages.
Je m'interrogeais sur ce que que tu voulais faire, et l'usage de l'équivalent de la représentation textuelle sous forme d'octets.
Là, ton souhait est juste qu'ils soient organisés dans le même ordre que l'ordre de lecture de la chaîne de caractère issue de la base de donnée, sans autres précisions, et c'est ce que fait ton code et le mien.
Comme tu le sais peut-être (mais tu n'évoques pas ce point, alors je te le signale), selon ce que représente la source de données et l'usage que tu feras de ton tableau d'octets, l'ordre devrait peut être adapté.
Par exemple, si les octets 0x10604F38 représentent la valeur d'un entier sur 32 bits, il sera effectivement stocké en mémoire dans cet ordre 10 60 4F 38 sur les systèmes Big Endian.
Par contre, il sera stocké :
- 38 4F 60 10 sur les systèmes Little Endian
- 60 10 38 4F sur les systèmes Mid-Big Endian
- 4F 38 10 60 sur les systèmes Mid-Little Endian
si ce sont des entiers sur 16 bits, cela sera encore différent, si tu veux échanger ces octets au travers d'un réseau, etc.
donc, à moins de savoir ce que représente la chaîne de caractère issue de la base de donnée, et savoir ce que tu veux en faire et sur quel type de système, il est impossible de dire si la représentation en mémoire que tu construis est pertinente ou pas :-)
Dal