Question

Existe-t-il un spécificateur de format pour sprintf en C qui mappe un char lancer un sort de la même manière que %x cartographie un int lancer un sort ?

Était-ce utile?

La solution

Oui et non.

Depuis sprintf prend une liste d'arguments variable, tous les arguments subissent une promotion par défaut avant sprintf les reçoit.Cela signifie sprintf volonté jamais recevoir un char -- un char sera toujours promu au rang int avant sprintf le reçoit (et un short le sera également).

Oui, depuis quoi sprintf reçoit sera un int, vous pouvez utiliser %x pour le convertir au format hexadécimal, et cela fonctionnera de la même manière si cette valeur a commencé comme un char, short, ou int.Si (comme c'est souvent le cas) vous souhaitez imprimer 2 caractères pour chaque entrée, vous pouvez utiliser %2.2x.

Attention cependant à un point :si ton char est signé et que vous démarrez avec une valeur négative, la promotion à int produira la même valeur numérique, qui normalement ne le fera pas être le même modèle de bits que le caractère d'origine, donc (par exemple) un caractère avec la valeur -1 s'imprimera normalement comme ffff si int est de 16 bits, ffffffff si int est de 32 bits, ou ffffffffffffffff si int est de 64 bits (en supposant la représentation typique du complément à 2 pour les entiers signés).

Autres conseils

C'est la meme chose %x.Tous char les valeurs sont converties en int avant d'être transmis à sprintf (ou toute autre fonction prenant un nombre variable de paramètres).

printf("%x\n", 'a');

impressions 61

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top