String mit Steuerzeichen initialisieren
-
Hi Leute,
gleich mal ein bisschen Quelltext:int favoriteFunction() { std::string z64 = "61615590737044764481"; for(int i=0;i<z64.size();i++) { z64[i]-=0x30; } //tue irgendwas return 0; }Ich habe eine Funktion in der ich mehrere größere Strings anlege, die als Zeichen jedoch nur Ziffern enthalten. Also wie oben Werte zwischen '0' und '9'.
Brauchen tue ich aber die Zeichen abzüglich der 0x30.Ok, das ist jetzt vielleicht etwas komisch forumliert, aber ich hoffe klar.
Das obige Beispiel würde auch funktionieren, aber ich will die Strings gleich richtig initialisieren und nicht vorher wertvolle Rechenzeit verplempern bei jeden neuen Eintritt in die Funktion, weil ich alle Zeichen konvertieren muss.
Ich hoffe jemand kann mir helfen.
viele Grüßeedit: laufindex angefügt sry
-
Z.B. "\x05" für das das Zeichen mit dem ASCII Code 5.
-
vielen dank, habs auch gerade gefunden.
http://de.wikipedia.org/wiki/Escape-Sequenz
-
Halt mal! Dann musst du aber bei Nullen aufpassen. Folgendes wäre in diesem Fall für dich vielleicht geschickt:
#define STRING_CONSTANT_CORRECT_LENGTH(str) std::string(str, sizeof(str)-1) int main() { std::string constant = STRING_CONSTANT_CORRECT_LENGTH("\x1\x0\x5\x7"); }Leider können sich Makros nicht rekursiv aufrufen, sonst hätte man ja so etwas schönes machen können:

#define NOTHING() #define NUMBER_TO_STRING_CONSTANT_HELPER0 NUMBER_TO_STRING_CONSTANT0 #define NUMBER_TO_STRING_CONSTANT_HELPER1 NUMBER_TO_STRING_CONSTANT1 #define NUMBER_TO_STRING_CONSTANT_HELPER2 NUMBER_TO_STRING_CONSTANT2 #define NUMBER_TO_STRING_CONSTANT_HELPER3 NUMBER_TO_STRING_CONSTANT3 #define NUMBER_TO_STRING_CONSTANT_HELPER4 NUMBER_TO_STRING_CONSTANT4 #define NUMBER_TO_STRING_CONSTANT_HELPER5 NUMBER_TO_STRING_CONSTANT5 #define NUMBER_TO_STRING_CONSTANT_HELPER6 NUMBER_TO_STRING_CONSTANT6 #define NUMBER_TO_STRING_CONSTANT_HELPER7 NUMBER_TO_STRING_CONSTANT7 #define NUMBER_TO_STRING_CONSTANT_HELPER8 NUMBER_TO_STRING_CONSTANT8 #define NUMBER_TO_STRING_CONSTANT_HELPER9 NUMBER_TO_STRING_CONSTANT9 #define NUMBER_TO_STRING_CONSTANT_HELPER NUMBER_TO_STRING_CONSTANT #define NUMBER_STRING_LITERAL_HELPER(...) std::string("" NUMBER_TO_STRING_CONSTANT_HELPER##__VA_ARGS__ ) , sizeof( "" NUMBER_TO_STRING_CONSTANT_HELPER##__VA_ARGS__ ) ) - 1 ) #define NUMBER_STRING_LITERAL(...) NUMBER_STRING_LITERAL_HELPER(__VA_ARGS__) #define NUMBER_TO_STRING_CONSTANT0 "\x0" NUMBER_STRING_LITERAL( #define NUMBER_TO_STRING_CONSTANT1 "\x1" NUMBER_STRING_LITERAL( #define NUMBER_TO_STRING_CONSTANT2 "\x2" NUMBER_STRING_LITERAL( #define NUMBER_TO_STRING_CONSTANT3 "\x3" NUMBER_STRING_LITERAL( #define NUMBER_TO_STRING_CONSTANT4 "\x4" NUMBER_STRING_LITERAL( #define NUMBER_TO_STRING_CONSTANT5 "\x5" NUMBER_STRING_LITERAL( #define NUMBER_TO_STRING_CONSTANT6 "\x6" NUMBER_STRING_LITERAL( #define NUMBER_TO_STRING_CONSTANT7 "\x7" NUMBER_STRING_LITERAL( #define NUMBER_TO_STRING_CONSTANT8 "\x8" NUMBER_STRING_LITERAL( #define NUMBER_TO_STRING_CONSTANT9 "\x9" NUMBER_STRING_LITERAL( #define NUMBER_TO_STRING_CONSTANT NOTHING( int main() { std::string str = NUMBER_STRING_LITERAL(1, 0, 5, 7); std::cout << str << "\n"; }