l'impression de la u_int8_t
J'ai uint8_t orig[ETH_ALEN];
Comment puis-je l'imprimer à l'aide de __printf(3, 4)
qui est définie comme #define __printf(a, b) __attribute__((format(printf, a, b)))
l'Orig devrait être ethernet adresse matérielle.
%u
fonctionne pour n'importe quel uintN_t
, je pense, ou au moins uint8_t
.OriginalL'auteur Saeed | 2013-01-16
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour construire une chaîne de format qui convient. Le
printf()
fonction n'a aucun moyen de l'impression d'un tableau en une seule fois, de sorte que vous besoin de le diviser et de les imprimer chaqueuint8_t
:La
& 0xff
est de veiller à ce onlu 8 bits est envoyé àprintf()
; ils ne devraient pas être nécessaires pour un type non signé commeuint8_t
si de sorte que vous pouvez essayer sans trop.Cela suppose un régulier MAC 48 bits, et imprime à l'aide de la classique, séparés par deux points hex style.
uint8_t
est garanti à seulement 8 bits de sorte que le masque est inutile. Mais, même alors, plus de 8 bits sera tout de même envoyé parce queprintf
est variadic donc ils seront promus àunsigned int
.Toutes les valeurs d'une
uint8_t
sont représentable comme unint
, de sorte que l'entier des promotions (et donc la valeur par défaut de l'argument des promotions] permettra de promouvoiruint8_t
àint
.Oh pinaise qu'est ce que je voulais dire... le
unsigned
est venu de nulle part. Ce que je voulais dire, c'est plus de 8 bits sera donné à printf parce que de l'entier de la promotion.OriginalL'auteur unwind
Utilisation du C99 les spécificateurs de format:
Vous avez raison. Corrigé, merci.
dans VC2013, ses définie comme %u
OriginalL'auteur