Heim >Backend-Entwicklung >C++ >Wie kann ich in C eine Hex-Zeichenfolge in eine vorzeichenbehaftete Ganzzahl umwandeln?
Hex-String in vorzeichenbehaftete Ganzzahl in C konvertieren
Viele Situationen erfordern die Konvertierung eines hexadezimalen Strings in eine vorzeichenbehaftete Ganzzahl in C. Beispielsweise könnten Sie eine Hex-Zeichenfolge wie „ffffefffe“ haben, die einen Binärwert von 11111111111111101111111111111110 darstellt, der der vorzeichenbehafteten Ganzzahl -65538 entspricht.
Lösung mit std::stringstream
Ein Ansatz, um diese Konvertierung zu erreichen, umfasst mit std::stringstream:
unsigned int x; std::stringstream ss; ss << std::hex << "fffefffe"; ss >> x;
Nicht-negative Zahlen
Um nicht-negative Zahlen zu verarbeiten, können Sie das folgende Beispiel verwenden:
#include <sstream> #include <iostream> int main() { unsigned int x; std::stringstream ss; ss << std::hex << "0000000A"; ss >> x; std::cout << static_cast<int>(x) << std::endl; }
Dies ergibt 10 als Ergebnis, was für die Hex-Zeichenfolge korrekt ist „0000000A“.
C 11 String-to-Number-Funktionen
In C 11 können Sie String-to-Number-Funktionen wie std::stoul verwenden:
std::string s = "0xfffefffe"; unsigned int x = std::stoul(s, nullptr, 16);
Andere Ansätze
Alternativ können Sie Bibliotheken wie Boost nutzen, die Funktionen wie lexical_cast:
unsigned int x = boost::lexical_cast<int>("0x0badc0de");
Rolling Your Own lexical_cast
bieten Wenn Sie einen einfacheren Ansatz ohne Abhängigkeiten bevorzugen, können Sie eine benutzerdefinierte Implementierung von verwenden lexical_cast:
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");
Das obige ist der detaillierte Inhalt vonWie kann ich in C eine Hex-Zeichenfolge in eine vorzeichenbehaftete Ganzzahl umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!