Wie wandle ich 6 Byte, die eine MAC-Adresse repräsentieren, in eine Zeichenfolge um, die die Adresse als Doppelpunkt-getrennte Hexadezimalwerte anzeigt?C++ Umwandeln eines Byte-Binärwerts in eine Zeichenfolge
Dank
Wie wandle ich 6 Byte, die eine MAC-Adresse repräsentieren, in eine Zeichenfolge um, die die Adresse als Doppelpunkt-getrennte Hexadezimalwerte anzeigt?C++ Umwandeln eines Byte-Binärwerts in eine Zeichenfolge
Dank
Sie wahrscheinlich eine Folge von sechs Bytes wie so formatiert werden, überprüfen möchten:
aa:bb:cc:dd:ee:ff
wo aa
die in hex formatiert erste Byte ist.
etwas tun sollte:
char MAC[6]; //< I am assuming this has real content
std::ostringstream ss;
for (int i=0; i<6; ++i) {
if (i != 0) ss << ':';
ss.width(2); //< Use two chars for each byte
ss.fill('0'); //< Fill up with '0' if the number is only one hexadecimal digit
ss << std::hex << (int)(MAC[i]);
}
return ss.str();
Wenn Sie teuer dies in einem gussartigen Stil tun wollen (von Ihrem Titel hier zu erraten), können Sie eine MAC-Klasse erstellen, implementieren die ostream-Betreiber dafür (wie mein gegebener Code) und boost::lexical_cast
benutzen.
Wenn es nicht null terminiert ist, können Sie die Methode assign() von std :: string verwenden, die optional zwei zusätzliche Argumente für Startposition und Anzahl der Zeichen, z. std :: string str; str.assign (reinterpret_cast
Die Eingabe ist ein 6-Byte-Binärwert, der mir von der Net-SNMP-Bibliothek geliefert wird, und alles, was ich brauche, ist der Hex-Wert, der zurückgegeben wird, da es eine MAC-Adresse ist. – aHunter
Ich habe diese Information zu Ihrer Frage hinzugefügt, da es gar nicht klar war, dass Sie das machen wollten. –
Nicht sicher, ob Sie Cast oder konvertieren meinen. Wenn konvertieren, dann kommt es darauf an, in welcher Form Sie es wollen. Sie könnten wollen Hex, Base-64, oktal, ...
Wenn Sie wollen, hex, betrachten STLSoft 's format_bytes()
Funktion, die alle Arten von Bestellung und Gruppierung tun können.
Wenn Sie Base-64 wollen, betrachten Sie die b64 library.
HTH
[EDIT] Im Einklang mit dem Bearbeiten von Bildern auf dem OP würde die volle impl sein:
#include <stlsoft/conversion/byte_format_functions.hpp>
#include <stdio.h>
int main()
{
unsigned char mac[6];
char result[STLSOFT_NUM_ELEMENTS(mac) * 3];
stlsoft::format_bytes(mac, sizeof(mac), &result[0], STLSOFT_NUM_ELEMENTS(result), 1, ":");
puts(result);
return 0;
}
Es gibt keine Notwendigkeit in diesem Fall den Rückgabewert von format_bytes()
zu überprüfen, weil Sie reichen genug Schreibpuffer ein. In einem realen Fall würden Sie
Was möchten Sie in der resultierenden Zeichenfolge? Möchten Sie eine textuelle Darstellung der Bytes (z. B. hex) oder möchten Sie die 6 Bytes tatsächlich als ASCII (oder eine andere Codierung) interpretieren? – Joe
Ich suche die Textdarstellung, also ja hex. – aHunter
Oder ist es eine 48-Bit-Nummer? Wenn ja, in welcher Kodierung ist es und was ist die Endian-Ness? – patros