CString in Hex
-
hmmm das bringts net ...
ich will halt das ich in nem string stehn haben :aus:
cmd="00 00 00 00 00 0E 01 65 07 00 00 00 01 01 00 01 01 FF FF 00";
soll:
cmd="'nul''nul''nul''nul''nul''so''soh''e''bel''nul''nul''nul''soh''soh''nul''soh''soh''FFh''FFh''null'";für ff gibt es kein darstellbares zeichen ...
also wie bekomm ich das hin ?
-
Etwa so (ungetestet):
#include <iomanip> #include <sstream> // ... std::istringstream in(cmd); std::ostringstream out; int x; while(in >> std::hex >> x) { out.put(static_cast<char>(x)); } std::string cmd_transformed = out.str();
Wenn's darum geht, dem Compiler einen solchen String unterzujubeln, benutz die \x##-Notation:
char buf[] = "\0\0\0\0\0\x0e\x01\x65\x07\0\0\0\x01\x01\0\x01\x01\xff\xff"; std::string cmd(buf, buf + sizeof(buf));
-
ok char buf[] = "\0\0\0\0\0\x0e\x01\x65\x07\0\0\0\x01\x01\0\x01\x01\xff\xff";
hat gut funktioniert...
nun will ich das n bisschen abändern:char *buf=NULL; buf = new char[256]; int len=0; CString cmd_a="", cmd_tmp=""; cmd_a="00 00 00 00 00 0E 01 65 07 00 00 00 01 01 00 01 01 FF FF 00"; CStringArray r2; int iNum2 = ParseTokens( r2, cmd_a, " "); if(iNum2>0){ len=iNum2; for(int i=0; i<iNum2; i++){ CString erg; erg="\x"+r2[i]; cmd_tmp=cmd_tmp+erg; } }
leider funktioniert erg="\x"+r2[i]; nicht ... ich bekomm immer die fehlermeldung: error C2153: Hexadezimale Konstanten muessen mindestens eine hexadezimale Ziffer enthalten
wie kann ich das umgehen ???
mfg LT
-
Du kannst die "\x??" Notation nur für Literale benutzen, da der Compiler (oder Präprozessor?) die Textersetzung zur Übersetzungszeit vornimmt und nach "\x" einen Wert erwartet. Zur Laufzeit geht das so nicht.
Du willst die Namenskürzel der Zeichen gemäß der ASCII Tabelle ausgeben? Dazu musst du dir wohl oder übel jedes Zeichen ansehen und den passenden String zurückgeben:
std::string ASCII_name( char c ) { // statisches Array aus Namen, musst du selbst füllen static std::string ASCII_NAMES[] = { "nul", "soh", "stx", "etx", /*etc, pp*/ }; if( c < 128 ) { return ASCII_NAMES[c]; } return ""; }
-
was soll dieses std:: eigentlich immer ???
das geht unter vc++ net also so jedenfals net ...und wie soll ich aus z.b. 00 oder 0e nen char machen ...
-
LordTerra schrieb:
was soll dieses std:: eigentlich immer ???
das geht unter vc++ net also so jedenfals net ...Das ist der Namensraum in dem die String-Klasse (und auch der restkliche Standard C++ Kram) deklariert ist.
-
der funktioniert bei mir aber nicht ... ausserdem will ich kein string als rückgabewert sondern einen CString... sonst muss ich ja schon wieder hin und her casten ... ey das mit den datentypen in c++ is einfach nur nen kraus ...
-
Wenn du Hilfe zu den MFC willst, bist du im falschen Unterforum. Da willst du hin, scheint mir.
-
naja mfc is es ja nur bedingt ...
-
In Standard-C++ gibt es keinen CString. Du benutzt Visual C++. Wenn das nicht der CString aus den MFC ist, was ist es dann?
Jedenfalls kann ich dir für den MFC-CString nicht so einfach eine Lösung hinrotzen wie weiter oben für std::string. Die Leute im MFC-Forum können es womöglich.