Datentyp BYTE ?



  • Hai zusammen,

    ich habe eine Frage bezüglich des Datentyps BYTE.
    Ich habe hier eine kleine Datei die ich mit dem fstream Objekt binär öffne, den Inhalt wollte ich in eine BYTE-Array einlesen. Ich habe nun einen kurzen Artikel gelesen in dem gesagt wird dass BYTE das gleiche ist wie char!
    Muß ich demnach ein Char Array anlegen um die binären Daten einzulesen ???😕
    Falls nicht was muss ich includieren um mit dem Datentyp BYTE arbeiten zu können ? 😕

    Danke vorab für eure Mühe
    😉
    ShadowEater
    😕



  • unsigned char entspricht einem Byte. Von der Größe her ist ein signed char identisch, die Bedeutung aber ist eine andere.



  • Danke Fellhuhn,

    und was muss ich includieren, wenn ichs einfach so probiere funktioniert das nicht !

    Gruß
    ShadowEater



  • Was funktioniert nicht? Einen Array von unsigned char anzulegen? Das möchte ich bezweifeln!

    ➡ Quelltext
    ➡ sinnvolle Fehlerbeschreibung!



  • Hi LordJaxom,

    doch ein Char Array funktioniert natürlich, aber eine Variable (Array) vom Typ byte nicht, da bekomme ich einen "nicht deklarierter Bezeichner".
    Was ich möchte ist eine binär geöffnete Datei in ein Array einlesen, mit einem
    als char delarierten Array funktioniert das auch aber mit byte/BYTE nicht.

    Hintergrund, ich muß aus der Datei (Schnittstellenbeschreibung) Daten extrahieren die dann noch weiter verwendet werden !

    Bin ich da mit char auf dem richtigen Weg ???

    Gruß ShadowEater

    P.S.: Ich programmiere noch mit VS 6



  • Benutz char oder unsigned char. byte gibt es so als Typ nicht. Ist aber an sich identisch.



  • Danke Fellhuhn,

    das wollt ich wissen, also bin ich auf dem richtigen Weg mit dem Typ Char !

    Gruß
    😉
    ShadowEater



  • Kannst natürlich mit einem typedef dafür sorgen, daß es den Typ byte "gibt". Solltest du dich dann für einen anderen Typ entscheiden (Stichwort signed/unsigned), geht die Änderung schneller. 😉



  • Hmmmmmmm, bwi größeren Projekten würd ich auch nen typedef anlegen aber da das hier so klein ist lohnt sich der Aufwand nicht 😉 .
    Wundert mich nur dass so seltsame Zeichen im Array stehen !

    Danke Dir Fellhuhn
    😉
    ShadowEater



  • ShadowEater schrieb:

    Wundert mich nur dass so seltsame Zeichen im Array stehen !

    Das kommt wahrscheinlich daher, dass die Zahlen (0 bis 255) in deinen Bytes/Chars als ASCII-Zeichen interpretiert werden (was sie ja aber nicht sind).



  • Und ein normaler char (signed) geht von -127 bis +127 wenn ich mich nicht irre. Daher wäre dann unsigned char sinnvoller.



  • afaik ists nicht genau festgelegt, ob normale char's signed oder unsigned sind (ein altes Erbe von C, soweit ich weiss). Char ist auch der einzige intergale Datentyp den es in drei ausfuehrungen gibt: cha, signed char, unsigned char sind drei unterschiedliche Datentypen im gegensatz zu int, long und short, wo der signed identisch mit dem unqualifizierten Typ ist.

    Fazit: wenn du mit Buchstaben arbeiten willst, dann benutze char, solltest du allerdings 1-byte grosse Zahlen wollen, so nutze je nach Bedarf signed oder unsigned char. (Wobei ich einen Datentyp BYTE intuitiv als Ansammlung von Bits, also als unsigned char sehen wuerde)



  • int und long ist ja auch häufig identisch.



  • Hi,

    ich habe alle chars zu unsigned chars gemacht !
    Nun bekomme ich aber in dieser Zeile:

    f.read(arrHeader,iHeaderEnd);
    

    diesen Fehler:

    Konvertierung des Parameters 1 von 'unsigned char *' in 'char *' nicht moeglich

    Aber in det Beschreibung von read steht dass ein unsigned char* übergeben werden kann !

    arrHeader hab ich so deklariert :

    unsigned char *arrHeader;
    

    Wisst Ihr worans liegt !
    Danke schonmal
    😉
    ShadowEater



  • Der read-Funktion ist es vollkommen egal, was du da für einen Pointer übergibst, nur der Compiler meckert. Du kannst mit read auch komplette structs einlesen, musst den Pointer nur in einen (char *)-casten.



  • Fellhuhn schrieb:

    int und long ist ja auch häufig identisch.

    int und long belegen haeufig gleich viel Speicher und haben dann dieselben Wertebreiche, sind aber unterschiedliche Datentypen. Deutlich wird das z.B. bei Pointern und templates: Wie die oben gepostete Fehlermeldung zeigt, kann man unsigned char* ind char* nicht ohne cast umwandeln. Genausoweing int* in long*, signed int* in unsigned int* usw. Was jedoch problemlos geht ist signed int* in int*, signed long* in long* und signed short* in short*, weils eben derselbe Datentyp ist. Einzig aus der Reihe faellt wie gesagt signed char und char, wo die Typen verschieden sind.



  • Hmmmm O.k. der cast ist klar dann hann ich doch von Anfang an mit char* arbeiten ?!

    Das kommt wahrscheinlich daher, dass die Zahlen (0 bis 255) in deinen Bytes/Chars als ASCII-Zeichen interpretiert werden (was sie ja aber nicht sind).

    Das klingt logisch, wie kann ich die Zeichen in lesbare bzw. verarbeitbare Zeichen konvertieren !

    Gruß
    😉
    ShadowEater



  • Den Datentyp BYTE gibts schon ... sonst springen Dir jetzt die VB Programmierer an den Hals ^^

    Nur eben in einem abgelegen Universum weitab vom c++ standard 🙂

    In der MS welt ist BYTE der datentyp ... fuer OLE (und ActivX) Compatible Schnisstellen ...

    MSDN:

    Byte (8 bits).
    This type is declared in WinDef.h as follows:

    typedef unsigned char BYTE;

    Also wenn mit ActiveX rummachast, solltest schon BYTE als datentyp verwenden, und <WinDef.h> oder <windows.h> includen, schon kennt er BYTE

    ansonsten lieber mit nativ c++ datentypen arbeiten

    Ciao ...



  • ShadowEater schrieb:

    Das kommt wahrscheinlich daher, dass die Zahlen (0 bis 255) in deinen Bytes/Chars als ASCII-Zeichen interpretiert werden (was sie ja aber nicht sind).

    Das klingt logisch, wie kann ich die Zeichen in lesbare bzw. verarbeitbare Zeichen konvertieren !

    Kommt auf dich drauf an 😉 Du hast in deinem char 8 Bits, wie du die darstellen willst, musst du dir überlegen. Du könntest sie als Zahl interpretieren und dezimal, hexadezimal oder oktal ausgeben; du könntest auch die einzelnen Bits ausgeben oder sonstwas - es sind deine 8 Bits 🙂



  • hmmmmm, nadenn ;))
    weißt Du zufallig ob es eine fnkt. gibt mit der ich mit cout die Zeichen head. ausgeben kann ?

    Danke ;))
    ShadowEater


Anmelden zum Antworten