Récupérations de valeurs dans chaîne de caractères - C++

Récupérations de valeurs dans chaîne de caractères Récupérer partie d'une chaîne de caractères (Résolu) » Forum - Linux / Unix Récupérer des parties de chaine de caractères » Forum - Programmation Attribuer valeur pour chaine de caractères » Forum - Programmation [c] récuperer une chaîne de caractère [Résolu] (Résolu) » Forum - C Récupérer une chaine de caractère variable sur excel (Résolu) » Forum - VB / VBA

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.

Forum

Récupérations de valeurs dans chaîne de caractères Récupérer partie d'une chaîne de caractères (Résolu) » Forum - Linux / Unix Récupérer des parties de chaine de caractères » Forum - Programmation Attribuer valeur pour chaine de caractères » Forum - Programmation [c] récuperer une chaîne de caractère [Résolu] (Résolu) » Forum - C Récupérer une chaine de caractère variable sur excel (Résolu) » Forum - VB / VBA

Web: www.shapebootstrap.net

3 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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 :

#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

Reply
réponses:
  • vivitare

    C'était pour lire une chaîne de caractère sur une BDD et la convertir en HEX. Mais j'ai trouvé la solution avec ceci :

    char lecture[]="10604F38CDA5"; char adresse[6];   sscanf(lecture, "%2x%2x%2x%2x%2x%2x", &adresse[0], &adresse[1],&adresse[2],        &adresse[3],&adresse[4],&adresse[5]) ;   for(int i=0;i<6;i++) {     printf("%2X ", (unsigned char)adresse[i]); }


    ce qui me donne cela :


    EDIT : Ajout des balises de code (la coloration syntaxique).
    Explications disponibles ici : ICI

    Merci d'y penser dans tes prochains messages.

  • [Dal]

    oui, on peut aussi faire comme cela.

    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

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed