Konvertieren von hexadezimal-string mit führendem "0x" unterzeichnet short in C++?

Fand ich den code konvertiert eine hexadezimale Zeichenkette in einen signed int mit strtol, aber ich kann nicht finden, etwas für ein short int (2 bytes). Hier' mein Stück code :

while (!sCurrentFile.eof() )
{
    getline (sCurrentFile,currentString);
    sOutputFile<<strtol(currentString.c_str(),NULL,16)<<endl;
}

Meine Idee ist, Lesen Sie eine Datei mit eine Breite von 2 Byte Werten (wie 0xFFEE), konvertieren Sie es in signed int und schreiben das Ergebnis in eine Ausgabedatei. Die Ausführungsgeschwindigkeit ist nicht ein Problem.

Ich könnte finden einige Möglichkeiten, um das problem zu vermeiden, aber ich würde gerne eine "one-line" - Lösung, so können Sie vielleicht helfen, für diese 🙂

Edit : Die Dateien wie folgt Aussehen :

0x0400
0x03fe
0x03fe
...

Edit : ich habe bereits versucht mit dem hex-Betreiber, aber ich habe noch zu konvertieren Sie die Zeichenfolge in eine ganze Zahl, vor so tun.

//This won't work as currentString is not an integer
myInt << std::hex << currentString.c_str(); 
  • Was macht deine input-Datei Aussehen? Es ist ziemlich schwer zu machen irgendwelche Empfehlungen, ohne diese Informationen.
  • bitte siehe strtol gibt lange , nicht signiert, int,
  • sscanf gibt ein int, aber der Rückgabewert von scanf-Familie Funktionen ist die Anzahl der Felder, die Sie erfolgreich konvertiert. Während ich Schätze die Werbung, die Sie transkribiert es falsch. 🙂
  • edit : my bad, ich wollte reduzieren Sie den code und nicht nicht Aussehen, was ich Tat - es war das Ende meines Arbeitstages 🙂
  • Es sieht aus wie Loki ist die einzige person, die tatsächlich die Frage beantworten.
InformationsquelleAutor gramm | 2009-09-28
Schreibe einen Kommentar