Comment convertir une adresse MAC (dans un tableau) à chaîne en C?
Comment convertir une adresse MAC dans un int
tableau de chaîne de caractères en C? Par exemple, je suis en utilisant le tableau suivant pour stocker une adresse MAC:
int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};
Comment puis-je convertir cette chaîne, comme "00:0d:3f:cd:02:5f"
?
(s)(sn)printf() est ton ami.
Un
Je sais, c'est un peu gros!
mais vous pouvez simplement utiliser
Un
int
pour chaque octet de l'adresse MAC? O. oJe sais, c'est un peu gros!
int
est valide choicelots de C Api utiliser des entiers pour les octets. Peut-être que vous souhaitez autoriser pour non valide les adresses MAC. (Non pas qu'il n'y a pas d'autres façons de le faire).mais vous pouvez simplement utiliser
uint64_t
et l'utilisation de 8 octets de l'adresse MAC au lieu de 24! =)OriginalL'auteur user2131316 | 2013-05-14
Vous devez vous connecter pour publier un commentaire.
Vous pourriez faire ceci:
OriginalL'auteur user2233706
%02x
serait de rendre la lettre cas comme demandé.vous avez raison, merci, j'ai remarqué que, et je vais le changer.
-1 parce que cela déborde
str
si leint
s dans le tableau sont trop grandes.Le tableau ne doit être de taille 18. Aussi longtemps que le tableau est de type unsigned char, il ne peut pas déborder. (BTW, j'ai toujours utiliser snprintf juste pour être sûr). Aussi, pour ceux qui cherchent à cette référence, gcc permet également une %02hhx spécificateur de format qui gère les nombres négatifs dans le cas d'signé des tableaux de char.
OriginalL'auteur Gisway
Tout d'abord, vous voulez probablement pour régler le type que vous utilisez pour stocker l'adresse MAC. Je pense que
unsigned char
est mieux dans ce cas. Ensuite, je vous recommande de créer une fonction pour écrire les adresses MAC, donc vous n'avez pas de copier et de coller le mêmeprintf()
déclaration de partout dans votre code et en ajustant le tableau que vous êtes d'indexation. (de plus, il permet au compilateur de vérifier le type que vous utilisez contre le paramètre de la fonction pour vous assurer qu'il est correct).Ici est à la fois un non réentrant solution similaire à
inet_ntoa()
, et une ré-entrant solution similaire àinet_ntoa_r()
:OK, très bien, j'ai ajouté une version réentrante juste pour vous. 😉
OriginalL'auteur mpontillo
Appel sprintf() dans une boucle ^_^:
OriginalL'auteur scottt