Konvertiere MAC Adresse std :: string in uint64_t

8

Ich habe eine hexadezimale MAC-Adresse in einer std :: string. Was wäre der beste Weg, diese MAC-Adresse in einen Integer-Typ umzuwandeln, der in einem uint64_t enthalten ist?

Ich bin mir bewusst, stringstream, sprintf, atoi, etc. Ich habe tatsächlich kleine Konvertierungsfunktionen mit den ersten 2 von denen geschrieben, aber sie scheinen schlampiger als ich möchte.

Also, kann mir jemand einen guten, sauberen Weg zum Konvertieren zeigen

%Vor%

in ein uint64_t?

PS: Ich habe keine Boost / TR1-Einrichtungen und kann sie nicht dort installieren, wo der Code tatsächlich verwendet wird (weshalb ich auch nicht einen meiner Versuche kopiert habe, tut mir leid!). Also halten Sie die Lösungen für direkte C / C ++ - Aufrufe. Wenn Sie eine interessante Lösung mit einem UNIX-Systemanruf haben, würde mich das auch interessieren!

    
John Humphreys - w00te 06.09.2011, 21:01
quelle

8 Antworten

8
%Vor%     
Maxim Egorushkin 06.09.2011, 21:27
quelle
3

Verwenden Sie sscanf:

%Vor%     
Nordic Mainframe 06.09.2011 21:27
quelle
3

Meine Lösung (erfordert c ++ 11):

%Vor%     
AB71E5 22.01.2016 14:39
quelle
1

Ich kann mir keine Zaubertricks einfallen lassen. Hier ist ein zufälliger Versuch, der möglicherweise besser ist als das, was Sie getan haben. Es ist simplish, aber ich wette, es gibt viel schnellere Lösungen.

%Vor%     
Mooing Duck 06.09.2011 21:26
quelle
1

Dies wird nur Hex-Ziffern durchschieben, bis die Zeichenfolge abläuft, ohne Rücksicht auf Begrenzer oder Gesamtlänge. Aber es konvertiert die Eingabezeichenfolge in das gewünschte Uint64_t-Format.

%Vor%     
Amardeep AC9MF 06.09.2011 21:43
quelle
1

Eine weitere schnellere Version ohne Aufruf von Bibliotheksfunktionen:

%Vor%     
Maxim Egorushkin 06.09.2011 22:18
quelle
1

Meine 2 Cent:

%Vor%     
Robᵩ 06.09.2011 21:36
quelle
0

Mehr C ++ 11-Wege ohne Validierung der Eingabedaten:

%Vor%

Live-Beispiel

    
Slava 20.07.2017 16:15
quelle

Tags und Links