Funktion, Parameter benötigt konvertieren... ???
-
Hallo Leute!
Ich hab ein Problem, wobei es da vermutlich nur daran liegt, dass mir die Grundlagen stark fehlen:
ich empfange über RS232 Telegramme, diese hab ich dann als CString vorliegen. Die Einzelnen (relevanten) Teile des Telegramms habe ich seperat in einem CStringCString strCalcdarüber möchte ich mit folgender Funktion (in meiner StateMachine zum Empfang des Telegramms) eine Checksumme bilden um mein empfangenes Telegramm auf Fehler prüfen zu können:
unsigned int CProtokollierungDlg::CalcCRC(unsigned char *dat, unsigned char anz) { unsigned char i=0; unsigned int uSum=0; for(i=0; i < anz; i++) uSum = UpdateCRC(dat[i],uSum); return (uSum); }Mein Problem ist jetzt schlichtweg, dass ich keine Ahnung hab, wie ich den CString strCalc konvertiere, dass meine Funktion was damit anfangen kann und mir ne ordentliche Checksumme ausspuckt.
Vielen Dank für Eure Hilfe und Bitte seht mir nach, dass ich nicht alleine damit zurecht komm, ich arbeite erst seit kurzem mit C++/MFC
-
Schau mal in die FAQ.

Kategorie: Casten
-
estartu schrieb:
Schau mal in die FAQ.

Kategorie: Castenhab ich bereits, hilft mir aber nix, weil ich nicht weis, wie ichs anwenden soll

wie gesagt, mir fehlts an den Grundlagenhab versucht mit:
int iCalc = atoi(strCalc);allerdings spuckt er mir schlichtweg eine "1" aus. Inhalt von strCalc sieht etwa so aus:
strCalc schrieb:
01WOUT000400605BC2
-
Also du willst einen CString in ein unsigned char*/char konvertieren wenn ich richtig verstehe. Dazu ist in CString eine "operator LPCTSTR" Funktion definiert.
Diese wandelt einen CString impliziert zu einem char* um wenn es nötig ist. Eine weitere Konvertierung zu unsigned char* dürfte dann für den Compiler denke ich kein großes Problem mehr sein.
Ich hoffe das war deine Frage....
-
Korrektur:
Du musst als funktionsparameter dann LPCTSTR als Typ hernehmen.
LPCTSTR ist entweder als char* oder, fals Unicode, als wchar_t* definiert.
-
Korrektur:
Bin heut nicht ganz auf der Höhe! Jetzt aber dafür vollständig.
unsigned int CProtokollierungDlg::CalcCRC(LPCTSTR dat, LPCTSTR anz)
Das ist dein Funktionsrumpf.
Erläuterung:LPCTSTR wird je nachdem ob _UNICODE definiert zu einem const char* oder zu einem const wchar_t*(ist dabei als ein unsigned short* definiert).
wenn du unbedingt auf ein unsigned char angewiesen bist, dann musst du den
Typ LPCTSTR in der Funktion zu einem unsigned char* casten. Vergiss aber nicht
LPCTSTR auf Typ du überprüfen. Wende dazu einen sizeof(LPCTSTR) an.
Ist das Ergebnis 2 Byte, dann hast du es mit UNICODE zu tun und kannst nicht in ein
char* casten. Wenn 1 Byte dann casten und fertig.Ich hoffe das hilft dir weiter
-
Schau Dir mal CString::GetBuffer() an