Betrachten Sie die Aufgabe, eine Hex-String-Darstellung einer Zahl in eine 32-Bit-Ganzzahl mit Vorzeichen umzuwandeln. Beispielsweise wird die Hexadezimalzeichenfolge „ffffefffe“ im Binärformat in 11111111111111101111111111111110 übersetzt und stellt die vorzeichenbehaftete Ganzzahl -65538 dar. Darüber hinaus müssen wir sowohl positive als auch negative Zahlen verarbeiten, wie zum Beispiel „0000000A“ (binär: 00000000000000000000000000001010; Dezimalzahl: 10).
Nutzung des std: :stringstream-Klasse, die Der Konvertierungsprozess wird unkompliziert:
unsigned int x; std::stringstream ss; ss << std::hex << "fffefffe"; ss >> x;
Durch Extrahieren der Ganzzahl aus dem Stream erhalten wir die 32-Bit-Ganzzahldarstellung mit Vorzeichen des Hex-Strings.
Boost's lexical_cast: Fehlerbehandlung (eingestellt)
Hinweis: Wie in der Quellantwort angegeben, wurde der lexical_cast-Ansatz von Boost zugunsten der neueren C 11-Funktionen eingestellt.
Boost bietet auch eine praktische Lösung, die eine Fehlerprüfung beinhaltet:
try { unsigned int x = lexical_cast<int>("0x0badc0de"); } catch(bad_lexical_cast &) { // Handle conversion error }
Benutzerdefinierter lexical_cast: Einfache Implementierung ohne Fehlerprüfung
Für diejenigen, die Boost nicht verwenden, eine vereinfachte Version von lexical_cast kann ohne Fehlerbehandlung verwendet werden:
template<typename T2, typename T1> inline T2 lexical_cast(const T1 &in) { T2 out; std::stringstream ss; ss << in; ss >> out; return out; } unsigned int x = lexical_cast<unsigned int>("0xdeadbeef");
Durch den Einsatz von std::stringstream oder den neueren C 11-Dienstprogrammen (wie std::stol) können Entwickler Hex effizient konvertieren Zeichenfolgen in vorzeichenbehaftete Ganzzahlen in C .
Das obige ist der detaillierte Inhalt vonWie konvertiere ich Hex-Strings in vorzeichenbehaftete Ganzzahlen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!