MAC Adresse umwandeln
-
Hi, ich möchte eine MAC Adresse in hexadezimaler Form einegeben lassen, und sie dann in einem char array als hex Wert (nicht Ascii!!!!) speichern.
Irgendwie muss ich das eingegebene aber noch in eine Zahl umwandeln.
Bisher hab ich nur die Fkt atoi gefunden, welche allerdings nur 'dezimale Strings' nimmt. Gibts eine Fkt, die das kann, was ich brauche oder hat jemand einen Schnipsel, der das schnell machen würde ? Thx!
-
strtol
-
wieso umwandeln? lies doch gleich die zahl ein:
unsigned mac; scanf("%X", &mac );
-
mac zack schrieb:
wieso umwandeln? lies doch gleich die zahl ein:
unsigned mac; scanf("%X", &mac );
sind deine 'unsigneds' 6 bytes lang?
-
802.3-freak schrieb:
mac zack schrieb:
wieso umwandeln? lies doch gleich die zahl ein:
unsigned mac; scanf("%X", &mac );
sind deine 'unsigneds' 6 bytes lang?
nö 8 wieso ?
nagut,dann nimm double
-
bytes protzing schrieb:
nagut,dann nimm double
ich glaub' dabei wirst du mit 'scanf ("%x", ...)' kein glück haben.
-
IEEE 754-freak schrieb:
bytes protzing schrieb:
nagut,dann nimm double
ich glaub' dabei wirst du mit 'scanf ("%x", ...)' kein glück haben.
mein compiler kann das
-
Thx, Strtol war genau das was ich gesucht habe
. scanf kam nicht in Frage, weil der String ja schon existert, und nicht in der Konsole eineggeben wird.
-
das wird dir 2 byte abschneiden, wenn sizeof(long) == 4 ist.
mac adressen sind 6 byte lang.
-
Thx, Strtol war genau das was ich gesucht habe . scanf kam nicht in Frage, weil der String ja schon existert, und nicht in der Konsole eineggeben wird.
geht auch mit strings "sscanf"
-
Ich habe gar keinen 6-Byte-Typ auf meinem System. Außerdem haben die Adressen auf Textinterfaces meistens Trennzeichen. Im täglichen Leben stelle ich mir das so vor:
unsigned char mac[6]; a2mac(mac, "01:02:03:04:05:06"); void a2mac(unsigned char *dst, char *mactext) { do *(dst++) = (unsigned char) strtoul(mactext, &mactext, 16); while (*(mactext += *mactext ? 1 : 0)); }
(oder so ähnlich)
-
bgdnoy schrieb:
do *(dst++) = (unsigned char) strtoul(mactext, &mactext, 16); }
void mac_extractor( char* dst, char* src ) { do{ if( *src != 0x3A ) *dst++ = *src; }while(*src++); } unsigned char mac[6]="0"; mac_extractor( mac, "AA:BB:CC:DD:EE:FF" );
-
Heute Lust auf Pufferüberläufe? Bleib bei dem fast food!int main (int ac, char **av) { unsigned char mac[7]; memset(mac, 0, 7); a2mac(mac, "61-62-63-64-65-66"); printf("%s\n", mac); mac_extractor(mac, "61:62:63:64:65:66"); printf("%s\n", mac); return 0; }
EDIT:
Windows mach Bindestriche lieber. Doch lieber ohne Zeichenkonstanten?
-
soviel zu deinem überlauf:
unsigned char mac[7]; memset(mac, 0, 7); a2mac(mac, "61-62-63-64-65-66-67-68");
sowas prüft man vor dem funktionsaufruf, oder meinetwegen auch innerhalb
-
Prüfung hin - Prüfung her.
Bei mir läuft er halt nicht über. Das ist schon was!
-
bei mir läuft auch nix über
-
bei mir läuft auch nix über
Weißt du was? Registrier dich, und wir können gerne drüber diskutieren. Sonst Schluss damit.