Zuerst möchten Sie wahrscheinlich die Art anpassen Sie verwenden um die MAC-Adresse zu speichern. Ich denke, unsigned char
ist in diesem Fall besser. Als Nächstes empfehle ich Ihnen, eine Funktion zum Schreiben der MAC-Adressen zu erstellen, sodass Sie nicht die gleiche printf()
Anweisung überall in Ihrem Code kopieren und das Array, das Sie indexieren, anpassen. (Auch erlaubt es der Compiler den Typ zu überprüfen Sie verwenden gegen den Funktionsparameter, um sicherzustellen, es ist richtig.)
Hier ist sowohl eine nicht-Reentry-Lösung ähnlich wie inet_ntoa()
und eine Reentry-Lösung ähnlich wie inet_ntoa_r()
:
#include <stdio.h>
unsigned char mac[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};
char* MACADDR_toString(unsigned char* addr)
{
static char str[18];
if(addr == NULL) return "";
snprintf(str, sizeof(str), "%02x:%02x:%02x:%02x:%02x:%02x",
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
return str;
}
char* MACADDR_toString_r(unsigned char* addr, char* str, size_t size)
{
if(addr == NULL || str == NULL || size < 18) return NULL;
snprintf(str, size, "%02x:%02x:%02x:%02x:%02x:%02x",
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
return str;
}
int main(int argc, char* argv[])
{
char str[18];
printf("%s\n", MACADDR_toString(mac));
printf("%s\n", MACADDR_toString_r(mac, str, sizeof(str)));
return 0;
}
[(s) (sn) printf()] (http://linux.die.net/man/3/printf) ist dein Freund. –
Ein 'int' für jedes Byte einer MAC-Adresse? O.o – mpontillo
Ich weiß, es ist ein bisschen groß! – user2131316