![]() |
C++ Strings casten
Hallo liebe Community,
ich stresse mich gerade ein wenig mit einem casting Problem herum und hoffe ihr könnt mir helfen. Ich lese aus einer Datei einen String dieser beinhaltet 2 Zeichen (1 Byte z.B. C9), dieses möchte ich nun in Feld eines "unsigned char"-Feldes bekommen. Die Typen sind fest vorgegeben, an denen kann nicht mehr gerüttelt werden. Derzeit nutze ich: array[0] = strtol(str, NULL, 16); (z.B. str = "c9") Dies frisst mir leider zu viele Ressourcen. Habt ihr einen vernünftigen Alternativvorschlag? Besten Dank schon mal im Vorraus. |
Wenn ich dich richtig verstehe willst du den String mit zwei Zeichen als Hex-Wert interpretieren!?
Wenn du weißt dass es Hex-Ziffern sind könntest du es direkt aus dem Ascii code berechnen // oberes nibble wert = str[0] >= '0' && str[0] <= '9' ? (str[0] - '0') << 4 : str[0] >= 'A' && str[0] <= 'F' ? (str[0] - 'A' + 0xA) << 4 : str[0] >= 'a' && str[0] <= 'f' ? (str[0] - 'a' + 0xA) << 4 : -1 /*fehler*/; // unteres nibble wert += str[1] >= '0' && str[1] <= '9' ? (str[1] - '0') : str[1] >= 'A' && str[1] <= 'F' ? (str[1] - 'A' + 0xA) : str[1] >= 'a' && str[1] <= 'f' ? (str[1] - 'a' + 0xA) : -1 /*fehler*/; ist jetzt nicht getestet aber so ähnlich könnte es mit wenigen Vergleichen und Additionen aussehen |
Klingt ansich nicht schlecht, die vergleiche auf groß und kleinschreibung kann man allerdings getrost rauslassen. Der Input ist grunsätzlich klein.
Ich werde es mal implementieren und testen wie es sich im Verhältnis zu strtol macht. Besten dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.