Comment “\ x” fonctionne-t-il dans une chaîne?

J’écris un programme C / C ++ qui consiste à insérer une représentation hexadécimale d’un nombre dans une chaîne et je ne comprends pas comment fonctionne \x . J’ai vu des exemples où des personnes ont écrit des choses telles que “\ xb2”. Dans ce cas, comment le programme sait-il si vous voulez l’hex de b suivi du nombre 2 ou si vous voulez l’hex de b2? De plus, quand il stocke cela dans la mémoire, est-ce qu’il enregistre les caractères “\ x” ou enregistre-t-il simplement la représentation hexadécimale?

À partir de la norme C99 (6.4.4.4):

Chaque séquence d’échappement octale ou hexadécimale est la plus longue séquence de caractères pouvant constituer la séquence d’échappement.

Par exemple, la chaîne "123\x45" est stockée au format hexadécimal sous la forme 31 32 33 45 .

Selon la réponse de Oli, la valeur valide la plus longue après le ‘\ x’ est utilisée.

Le ‘\ x’ n’est pas stocké. Toute séquence d’échappement ne stocke pas les caractères que vous voyez à l’écran, mais le caractère réel spécifié. Par exemple, ‘\ n’ est actuellement stocké sous la forme d’un caractère de saut de ligne, 0x0A.

La traduction est effectuée au moment de la compilation, de sorte que chaque chaîne que vous entrez manuellement dans le code source avec \x et finisse par être le caractère qu’elle représente dans le binary. Si vous voulez faire cela au moment de l’exécution, vous aurez besoin d’appeler une fonction d’parsing telle que strtol() utilisant la base 16 en passant la chaîne contenant l’hex et de la strtol() char.

Lorsque vous utilisez la séquence d’échappement \ x dans une chaîne, les données qui suivent le \ x sont réellement stockées dans sa représentation binary.

Donc, la chaîne “ABC” est équivalente à la chaîne “\ x414243”

Si vous souhaitez émettre des valeurs hexadécimales sous forme de caractères d’affichage, vous devez utiliser le caractère de spécificateur de format% x ou% X:

 printf("%X%X%X", 'A', 'B', 'C'); // emits "414243" 

Voir les sections 1.2.6 et 1.2.7 du Guide de référence de la bibliothèque C

J’espère que cette explication aide.