MAC Adresse in Octet String
-
Hallo!
Ich möchte ein MAC Adresse speichern. Diese soll laut vorgabe als Octet String [6] gespeichert werden. Octete passen ja in die "Zellen eines Char Array rein, aber damit will es nicht so recht und ich bekomme die Meldung, das die Integer Konstante zu lang für den long Typ ist. Wahrscheinlich weil er die ausgelesene
MAC 00155865F9D2 als zwölf Byte und nicht als 6 Byte sieht.Es muss ja einen Weg geben die MAC unterzubringen ohne jede Zweier Hex gruppe in eine Binärzahl umzuwandeln und diese dann zu speichern.
Gibt es einen Datentyp in C der diesen Octet Strings entspricht, oder muss mich mir selber per typedef einen erstellen? Oder habt ihr noch andere Vorschläge?
-
Was spricht dagegen, diesen Hex-String mit strtoul() in eine Zahl umzurechnen?
-
cgaw25 schrieb:
Es muss ja einen Weg geben die MAC unterzubringen ohne jede Zweier Hex gruppe in eine Binärzahl umzuwandeln und diese dann zu speichern.
leider nicht. 6 bytes sind 6 bytes und zum speichern braucht man mindetens 6 bytes. mir ist auch keine komprimiermethode für mac-adressen bekannt.
-
Ich habe da auch nichts passends gefunden um Hex nach Bin umzuwandeln. Mein Versuch sieht so aus:
void ConvertHexToBin(const unsigned char *cHex, int iHexLen, unsigned char *cBufferBin) { int iBinIndex=0, iStart=0; // Odd number of hex signs. Add a leading 0. if (iHexLen%2 > 0) { iStart=1; cBufferBin[iBinIndex++] = HexToNbr(cHex[0]); } // Convert a even nbr of hex signs to bin.: for (unsigned int i=iStart; i<iHexLen; i=i+2) { cBufferBin[iBinIndex++] = HexToNbr(cHex[i]) * 16 + HexToNbr(cHex[i+1]); } } // Converts a hex char into a number char HexToNbr(const char cHex) { if (cHex>=48 && cHex<=57) { return cHex-48; } else if(cHex>=65 && cHex<=70) { return 10+cHex-65; } else if(cHex>=97 && cHex<=102) { return 10+cHex-97; } else { // Error. (throw?) } }
Um Deine Frage nach dem Datentyp exakt zu beantworten müsstest Du Deinen Source zeigen was Du genau versuchst.
-
Man das ging ja schnell. Vielen Dank für die Antworten, ich habe inzwischen selber weiter gesucht und bin mit ether_aton() über Umwege zum Ziel gekommen.
Eine Frage habe ich aber noch:
CStoll schrieb:
Was spricht dagegen, diesen Hex-String mit strtoul() in eine Zahl umzurechnen?
Ich verstehe nicht wie das passen soll, die 6 Byte sind doch 48 bit und der unsigned long nur 32.
-
Stimmt, das hatte ich nicht bedacht - dann mußt du den String halt in handliche Stücke aufspalten und diese Teile umrechnen.