CString in unsigned char[1024] konvertieren?
-
Der Übergabeparameter an GetBuffer() ändert doch nix daran, dass er es nicht casten kann. --> geht nicht ( auch empirisch nicht )
-
Little_Bird schrieb:
Hi !
Danke erstmal, aber dein Lösungsvorschlag geht net:
error C2440: '=' : 'ATL::CSimpleStringT<BaseType>::PXSTR' kann nicht in 'char *[1024]' konvertiert werden
with
[
BaseType=TCHAR
]Vielleicht eher so:
char* c = s.GetBuffer(1024);
-
char* c = s.GetBuffer(1024);
-> Geht zwar, aber ich will ja auf unsigned char[1024] casten... also nicht ganz das, was ich möchte
-
Little_Bird schrieb:
char* c = s.GetBuffer(1024);
-> Geht zwar, aber ich will ja auf unsigned char[1024] casten... also nicht ganz das, was ich möchte
Also nochmals ein Versuch:
unsigned char data[1024]; // sData ist ein CString. for(int i=0; i<len;i++){ data[i] = sString.GetAt(i); } // da musste allerdings noch diverse Kontrollmechanismen einbauen, damit es zu keinem Overflow kommt.
-
ich versuch das mal.. danke
-
Also ich habe mir folgendes zurechtgeschustert:
CString sMyString = "Something"; unsigned char szTest[1024]; int j = 0; for (j = 0; ((j< sMyString.GetLength()) && (j<1023));j++) { szTest[j] = sMyString.GetAt(j); } szTest[j] = '\0';
Aber das Programm schmiert mir dadurch an anderer Stelle weg.
Was mache ich falsch, bzw. was habe ich nicht berücksichtigt?
-
Little_Bird schrieb:
Also ich habe mir folgendes zurechtgeschustert:
CString sMyString = "Something"; unsigned char szTest[1024]; int j = 0; for (j = 0; ((j< sMyString.GetLength()) && (j<1023));j++) { szTest[j] = sMyString.GetAt(j); } szTest[j] = '\0';
Aber das Programm schmiert mir dadurch an anderer Stelle weg.
Was mache ich falsch, bzw. was habe ich nicht berücksichtigt?Also dieses Codefragment funktinoiert ja.
Greiffst du vielleicht auf szTest zu, obwohl diese noicht, oder nicht mehr initialisiert ist? Beachte immer die Gültigkeit von lokalen Variablen.
-
Bist du sicher, das die Funktion an die du übergibst auch nur bis zum '\0' (Stringende) liesst? Vielleicht sollteste das Array vorher mal komplett initialisieren, vielleicht bringt's ja was..
-
Little_Bird schrieb:
Also ich habe mir folgendes zurechtgeschustert:
CString sMyString = "Something"; unsigned char szTest[1024]; int j = 0; for (j = 0; ((j< sMyString.GetLength()) && (j<1023));j++) { szTest[j] = sMyString.GetAt(j); } szTest[j] = '\0';
Aber das Programm schmiert mir dadurch an anderer Stelle weg.
Was mache ich falsch, bzw. was habe ich nicht berücksichtigt?Viel zu umständlich. Wie wäre es mit einem einfachen
CString foo = "bla bla bla"; char bar[1024]; strcpy(bar, foo)
(CString hat einen Cast nach const char* eingebaut)
-
ist schon mal jemandem der Unterschied zwischen signed char und unsigned char aufgefallen?
LittleBird's Codeschnipsel selbst ist es nicht (und funktioniert auch noch ein bißchen unter UNICODE).
sky21: denk' ich auch
-
Jo, char ist von -128 bis +127 und unsigned char von 0 bis 255, entsprechend dem ASCI-Code, oder nicht?
und die konvertierung, bzw Benutzung eines CStrings als char, bzw char* (kann man ja dereferenzieren) hatte ich schon im zweiten Posting genannt, was natürlich zugegebernermaßen irgendwie nicht so sinnvoll war *g*.
Da die Konvertierung von sky21 aber funktioniert (habs grad zu sicherheit nochmal getestet) liegt der Fehler wo anders..
-
ist schon mal jemandem der Unterschied zwischen signed char und unsigned char aufgefallen?
LittleBird's Codeschnipsel selbst ist es nicht (und funktioniert auch noch ein bißchen unter UNICODE).
Was meinst du damit?
Also mein Codeschnipsel funktioniert, der Absturz lag woanders dran. Ist mein Code falsch, oder nur umständlich?
-
CString foo = "bla bla bla";
char bar[1024];
strcpy(bar, foo);ist das eine konvertierung nach unsigned char??
-
strcpy arbeitet mit "char *", und für den ist signed/unsigned (glaub ich) compiler-spezifisch. Man könnte aber mit einem cast arbeiten:
CString foo = "bla bla bla"; unsigned char bar[1024]; strncpy( (char *)bar, foo, 1023); // sicher ist sicher :) bar[1023]=0;
Deine Schleife hat den Vorteil daß sie auch für Unicode-Strings fuunktioniert, sofern diese keine Unicode-Zeichen enthalten.