Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Convertir un hexa en texte

12 réponses
Avatar
Michaël Delva
Salut à tous,

Je voudrais convertir un hexa en sa représentation texte.

J'ai l'hexa suivant: 32595559 qui correspond à la chaine YUY2.
Ou alors 808802372 qui correspond à DX50.

Je ne sais malheureusement pas comment aller de l'une à l'autre.

Quelqu'un peut m'aider?

Merci d'avance

10 réponses

1 2
Avatar
Michel Michaud
Dans le ,
Je voudrais convertir un hexa en sa représentation texte.

J'ai l'hexa suivant: 32595559 qui correspond à la chaine YUY2.
Ou alors 808802372 qui correspond à DX50.

Je ne sais malheureusement pas comment aller de l'une à l'autre.


Tu veux dire qu'il faut deviner le rapport entre la valeur
hexadécimale et le texte ? D'où vient ce problème, il doit bien
y avoir des explications, sinon bonne chance !

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Michel Michaud
Dans le messageroh5d.32423$,
Dans le ,
Je voudrais convertir un hexa en sa représentation texte.

J'ai l'hexa suivant: 32595559 qui correspond à la chaine YUY2.
Ou alors 808802372 qui correspond à DX50.

Je ne sais malheureusement pas comment aller de l'une à
l'autre.


Tu veux dire qu'il faut deviner le rapport entre la valeur
hexadécimale et le texte ? D'où vient ce problème, il doit bien
y avoir des explications, sinon bonne chance !


Je crois que je viens de voir le rapport dans ton premier exemple
alors il y a peut-être une erreur dans ton deuxième...

unsigned long h= 0x32595559; // 4 octets contenant les codes
// ASCII de 2 Y U et Y

char *t= (char*)(&h); // Je me permets l'écriture à la C pour ce
// problème de bas niveau :-)

// ou même
string s= static_cast<char*>(&h);

cout << t << ' ' << s; // Devrait écrire YUY2 YUY2 si on a bien
// le bon ordre des octets en mémoire.

(Dans ton deuxième exemple (DX50), ta valeur ne serait pas en
décimal ?)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Avatar
Michel Michaud
Dans le messagejBh5d.32538$,

J'ai posté trop vite (ayant reçu un appel téléphonique au moment
où je répondais).

unsigned long h= 0x32595559; // 4 octets contenant les codes
// ASCII de 2 Y U et Y


Je supposais ici que les unsigned long ont quatre octets...
Sinon c'est toi qui sait où tu as la valeur à convertir,
je vais supposer que c'est dans « h » :-)

char *t= (char*)(&h); // Je me permets l'écriture à la C pour ce
// problème de bas niveau :-)



Ici, il n'y a pas de qui permet de penser à une chaîne à
la C, ça ne fonctionnera pas...

// ou même
string s= static_cast<char*>(&h);


Même problème de ici...

Alors mettons plutôt :

string s(static_cast<char*>(&h), 4);

cout << s;

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Michaël Delva
Tu veux dire qu'il faut deviner le rapport entre la valeur
hexadécimale et le texte ? D'où vient ce problème, il doit bien
y avoir des explications, sinon bonne chance !



Voici ce que j'ai comme infos depuis Microsoft:

DWORD fccYUY2 = '2YUY'; // Declares the FOURCC 'YUY2'.

Reversing the order is necessary because the Microsoft Windows operating
system uses a little-endian architecture. 'Y' = 0x59, 'U' = 0x55, and '2' =
0x32, so '2YUY' is 0x32595559.

Je voudrais donc faire l'inverse: aller de 0x32595559 à YUY2 par exemple

Avatar
Michel Michaud
Dans le ,
Je voudrais donc faire l'inverse: aller de 0x32595559 à YUY2 par
exemple


Oui, j'ai finalement compris (c'est ton deuxième exemple qui
était mêlant...). J'espère que mes autres réponses t'aideront...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Loïc Joly
Michaël Delva wrote:
Tu veux dire qu'il faut deviner le rapport entre la valeur
hexadécimale et le texte ? D'où vient ce problème, il doit bien
y avoir des explications, sinon bonne chance !




Voici ce que j'ai comme infos depuis Microsoft:

DWORD fccYUY2 = '2YUY'; // Declares the FOURCC 'YUY2'.

Reversing the order is necessary because the Microsoft Windows operating
system uses a little-endian architecture. 'Y' = 0x59, 'U' = 0x55, and '2' =
0x32, so '2YUY' is 0x32595559.

Je voudrais donc faire l'inverse: aller de 0x32595559 à YUY2 par exemple


Un truc du genre (non testé et non portable) :


unsigned long val = 0x32595559;
string result(4);

for (int i=0 ; i<4 ; ++i)
{
result[i] = static_cast<char>(val & 0xFF);
val = val >> 16;
}


Avatar
Michaël Delva
J'ai une erreur:

unsigned long h = 0x32595559;

std::string s(static_cast<char*>(&h), 4);

Me sort:

Impossible de transtyper de 'unsigned long *' en 'char *'
Avatar
Michel Michaud
Dans le ,
J'ai une erreur:

unsigned long h = 0x32595559;

std::string s(static_cast<char*>(&h), 4);

Me sort:

Impossible de transtyper de 'unsigned long *' en 'char *'


Yep, désolé, code non testé, il faut un reinterpret_cast...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
M. B.
"Loïc Joly" a écrit dans le message de
news:4155a914$0$726$
Michaël Delva wrote:

Voici ce que j'ai comme infos depuis Microsoft:

DWORD fccYUY2 = '2YUY'; // Declares the FOURCC 'YUY2'.

Reversing the order is necessary because the Microsoft Windows operating
system uses a little-endian architecture. 'Y' = 0x59, 'U' = 0x55, and
'2' > > 0x32, so '2YUY' is 0x32595559.



Je voudrais donc faire l'inverse: aller de 0x32595559 à YUY2 par exemple


Un truc du genre (non testé et non portable) :


unsigned long val = 0x32595559;
string result(4);

for (int i=0 ; i<4 ; ++i)
{
result[i] = static_cast<char>(val & 0xFF);
val = val >> 16;
}


Je pense que tu voulais ecrire

val = val >> 8;

MB


Avatar
James Kanze
"Michaël Delva" writes:

|> Je voudrais convertir un hexa en sa représentation texte.

Hexa, c'est une représentation texte.

|> J'ai l'hexa suivant: 32595559 qui correspond à la chaine YUY2.
|> Ou alors 808802372 qui correspond à DX50.

|> Je ne sais malheureusement pas comment aller de l'une à l'autre.

Ça dépend du rapport entre les deux. Je n'en vois pas du tout dans le
deuxième cas ; dans le premier, j'ai l'impression que c'est les codes de
caractères en hexadécimal, avec la chaîne inversée. Ce qui n'est pas
difficile à faire :

std::ostream&
codeHexaInverse( std::ostream& out, std::string const& in )
{
for ( std::string::const_reverse_iterator it = in.begin() ;
it != in.end() ;
++ it ) {
out << GB_HexFmt( 2 ) << (int)(unsigned char)*it ;
}
}

(Le manipulateur GB_HexFmt est disponible sur ma site.)

Seulement, l'intérêt m'en semble si faible que je suis convaincu que ce
n'est pas ce que tu veux faire:-). Je me démande, par exemple, si tu
n'es pas en train de confondre hexa et format interne (qui est binaire,
mais avec une signification différente de binaire que celle de
hexadécimal). Mais dans ce cas-là, je me démande toujours 1) pourquoi
l'inversion des caractères, et 2) le rapport entre les octets et le
texte dans le deuxième exemple.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
1 2