unsigned char
-
Ich hatte das auch 'mal.
Bei mir hilft ein sauberer TypeCast
- Du laest in längeren Typ wandeln, da hat der Compiler Problem mit Vorzeichen beim automatischen TypeCast.
Musste sauber sagen was er machen soll
-
Danke schon mal,
also TypeCast heißt Typumwandlung. Und was soll ich wie umwandeln? Ich habe in der in der Hilfe nur etwas mit Zeigerdeklariationen gefunden. Bitte um mehr Infos. Danke.
Grüße
Franky
-
Das machste ungefaehr so:
...neuerTyp(Datenfeld) ...
oder
... (neuerTyp)Datenfeld ...als neuerTyp mus exakt stehen, was der Befehl, den Du rufst an der Stelle will!!
Das musste aus Hilfe zu dem Befehl holen
Datenfeld ist das, was Du uebergeben willst, Variable, Konstante oder Wert
-
Anstelle der C-Casts empfehle ich aber immer wieder wärmstens die _cast s von C++.
-junix
-
Verstehe ich das jetzt richtig?
unsigned char ReceiveBuff[10]; ... Receive(); ... int x= int(ReceiveBuf[5]);
Ich glaube, das habe ich schon probiert. Müsste es aber nochmal testen. Sollte ich besser gleich unsigned int benutzen?
Grüße
Franky
-
-
So in etwa.
Aber warum nicht
unsigned int x .....;???
sollte aber auch geh'n?
-
DIese unübersichtlichen und gefährlichen Klammer-Aktionen sind C-Style-Casts... C++ hat aus Gründen der Übersichtlichkeit, der Sicherheit und der Dokumentation neu die Schlüsselwörter
static_cast dynamic_cast const_cast reinterpret_cast
eingeführt.
-junix
-
Alles klar, Fehler gefunden!
Der Punkt, an dem dem der Fehler produziert wurde lag ja in meiner DLL. Diese war aber mit der falschen Host-Anwendung verbunden.
Ich hatte nämlich in meiner richtigen Host-Anwendung alle char- Arrays in unsigned char- Arrays verändert und konnte mir daher diesen Fehler nicht erklären.
Da aber die DLL mit der alten Anwendung mit dem char-Arrays zusammengearbeitet hat, wurden hier vorzeichenbehafteten Werte genutzt.
Also bleibt festzuhalten: char -128 ... 127
unsigned char 0 ... 255Schade, dass dies nicht so ganz mit der Borland Hilfe überein stimmt. Da wird ja gesagt, daß mit der Compiler-Option -K der Ausdruck char auf unsigned char voreingestellt wird. Das hätte mir einiges erspart.
Trotzdem vielen Danke an alle. Es ist wirklich toll, wie einem hier geholfen wird, auch wenn man sich nicht gleich verständlich ausdrückt.
...und das nächste Problem kommt bestimmt.
Grüße
Franky
-
Original erstellt von Franky:
Also bleibt festzuhalten: char -128 ... 127
unsigned char 0 ... 255Wobei dies so auch in der Borland Hilfe in der Datentypen-Dokumentation steht (-;
-junix
-
Na ja, ich habe z.B. in der Hilfe dies gefunden:
Beispiele
unsigned int i; unsigned i; /* Gleichwertig mit "unsigned int i;" */ unsigned long int l; /* "int" ist erlaubt, aber nicht erforderlich */ unsigned char ch; /* Voreinstellung für char ist unsigned */
Wobei vor allem die letzte Zeile interessant ist. Findet man unter unsigned -> Beipiele. Oder dies:
Vorzeichenlose Zeichen
Kommandozeilen-Äquivalent = -K)Ist die Option vorzeichenlose Zeichen eingeschaltet, behandelt der Compiler alle char-Deklarationen, als seien sie vom Typ unsigned char, wodurch die Kompatibilität mit anderen Compilern gewährleistet wird.
Standard= AUS (char-Deklarationen als signed; -K-)
Und enn ich mir die Compiler-Optionen in meinen .bpl Dateien mit einem Editor ansehen, finde ich:
<OPTIONS> <IDLCFLAGS value="-I..\. -ISleepTest -I$(BCB)\projects\mmtimer -I$(BCB)\include -I$(BCB)\include\vcl -src_suffix cpp -D_DEBUG -boa"/> <CFLAG1 value="-Od -H=$(BCB)\lib\vcl60.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- -c -tW -tWM"/> <PFLAGS value="-$YD -$W -$O- -$A8 -v -JPHNE -M"/> <RFLAGS value=""/> <AFLAGS value="/mx /w2 /zd"/> <LFLAGS value="-D"" -aa -Tpe -x -Gn -v"/> <OTHERFILES value=""/> </OPTIONS>
Also so ganz eindeutig ist die Hilfe auf jeden Fall nicht, oder verstehe ich das alles falsch???
Grüße
Franky