unsigned char als byte ???



  • Hi,
    ich habe eine Variable 'unsigned char WERT'. Diese fülle ich mit der Zahl 99.
    Wenn ich jetzt diese Variable aufrufe, bekomme ich als Wert ein 'c' (ASCII = 99)!!!
    Ich brauche aber die Zahl 99 als Byte-Wert!!!
    Wie geht das...???

    Gruß torsten



  • Wie rufst du sie denn auf? Evtl. musst du sie auch erst nach int casten.



  • Was vestehst du unter 99 als Byte? Was ist deine 99? Ein dezimaler Wert?



  • sorry,
    ich sollte es doch lieber ausführlich schreiben:
    Ich habe ein Interface über USB angeschlossen. Nun möchte ich, das einzelne Bits gesetzt werden. Dazu wird über ein 'DeviceIOControl'-Aufruf das Byte geschickt. Man kann natürlich mit WERT=1 das erste Bit setzen(teoretisch). Aber es wird ja nicht eine 1 als Byte-Wert sondern ein ASCII-Zeichen geschickt!!! Das verursacht natürlich einen Fehler...



  • Und was genau hat das mit dem BCB zu tun!?
    Da du DeviceIOControl erwähnst und das Problem offensichtlich bei der Übergabe korrekter Parameter liegt verschieb ich dich mal nach WinAPI.



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • mal ein auszug aus windows.h oder so da steht

    #define BYTE unsigned char
    

    ist also gehüpft wie gesprungen. wenn du das erste bit setzen willst dann mach doch einfach folgendes:

    unsigned char c = 1;
    

    damit wird nur das erste bit gesetzt, weil er ja von int(1) zu unsigned char castet



  • genau da liegt ja das Problem. Wenn ich die Variable BYTE = 1 setzte, wird aus der 1 ein Zeichen der ASCII-Tabelle! (und zwar das mit der Nr.1)
    Wenn ich z.B. das 8. Bit setzen möchte, sprich BYTE = 128, dann übergibt er nicht die 128 sondern ein € (€ steht in der ASCII-Tab als 128. Zeichen)...



  • Halte mich für blöd... aber da besteht doch überhaupt kein Unterschied. Der einzige Unterschied besteht in der Interpretation des Wertes.
    Es würde genausowenig einen Unterschied machen, wenn Du z.B. das hier versuchen würdest:

    char a = 'A';
    std::cout << a;
    a = 65; //Der ASCII-Wert von 'A'
    cout << a;
    

    Die Bits sind genauso gesetzt, also: wo ist dein Problem?!? 😕



  • Es kann aber auch sein, dass ICH da was nicht ganz verstehe! Also, ich muß dem Interface per DeviceIOControl eine Zahl im BYTE-Format übergeben. Wenn ich im Quellcode eine Haltemarke setze und den Cursor auf meine Variable setze, erscheint dann als Wert das ASCII-Zeichen. Da muß doch aber eine Zahl stehen, oder...?
    Ich gebe mal mein Code mit...

    byte compulab::schreiben_lesen_Digital(unsigned char wert)
       {
       Ausgang_bValue1 = wert; //hier steht das Bitmuster
       Ausgang_bFunction=6;
       bResult= DeviceIoControl(hgDriver,COMPULAB_IOCTR,&Ausgang, sizeof(Ausgang),&Eingang,sizeof(Eingang),&count,NULL);
       return bResult;
       };
    

    😕



  • torsten_156 schrieb:

    Wenn ich im Quellcode eine Haltemarke setze und den Cursor auf meine Variable setze, erscheint dann als Wert das ASCII-Zeichen. Da muß doch aber eine Zahl stehen, oder...?

    Das stört eigentlich nicht - ist ja nur eine Frage der Darstellungsweise 🙄



  • jo,
    nach weiteren Tests habe ich feststellen müssen, daß die Deklaration meiner Variablen den Fehler garnicht verursacht!!! 🕶
    Die Lämpchen meines Interfaces leuchten auch so...

    NOCHMALS DANKE für die Hilfen...

    Gruß Torsten


Anmelden zum Antworten