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



  • @junix

    C-Casts ; _cast s ???

    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 ... 255

    Schade, 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 ... 255

    Wobei 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


Anmelden zum Antworten