Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: MFC (Visual C++) ::  Werte werden beim Casten mit 1 initialisiert     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
._Bernhard_.
Unregistrierter




Beitrag ._Bernhard_. Unregistrierter 13:26:02 13.02.2018   Titel:   Werte werden beim Casten mit 1 initialisiert            Zitieren

Guten Tag

Ich habe hier ein merkwürdiges Phänomen.

Ich bemomme von einer Funktion 32Bit Werte in einem 4 Felder großen char Array.
Wenn ich dieses Char array auf eine DWORD Variable umwandle, werden die Variablen mit 1en initialisiert.

Hier der Codeabschnitt:

C++:
1
2
3
4
5
6
7
8
DWORD CConvert::CharArrayToDWord(char chDataArray[4])
{
    DWORD   dwVal = (DWORD(chDataArray[0])       |
                    (DWORD(chDataArray[1]) <<  8)|
                    (DWORD(chDataArray[2]) << 16)|
                    (DWORD(chDataArray[3]) << 24));
    return dwVal;
}


Bei diesem Codeabschnitt kommt es jetzt immer wieder vor, dass wenn z.B. chDataArray[0] den Wert 0xE3 enthält, DWORD(chDataArray[0]) zu 0xFFFFFFE3 wird.
Dadurch stimmt natürlich das Ergebnis nicht mehr.

Warum wird hier DWORD(chDataArray[0]) nicht zu 0x000000F3 ?
Kann mir das bitte jemand erklären?

Ich habe mir jetzt damit beholfen das ich alle Einträge nach der Konvertierung in DWORD mit 0x000000FF verunde, trotzdem würde mich interessieren wo hier die ganzen Einsen herkommen.

mfg Bernhard

Programmierumgebung:
Visual Studio 2005

OS:
Win7
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4831
Beitrag Th69 Mitglied 13:45:18 13.02.2018   Titel:              Zitieren

Du solltest mit 'unsigned char' arbeiten, denn negative 'char' (Bytes) werden beim Casten mit 0xFF erweitert (anstatt 0x00).
._Bernhard_.
Unregistrierter




Beitrag ._Bernhard_. Unregistrierter 15:27:15 13.02.2018   Titel:              Zitieren

Das Witzige ist ja, das nicht immer mit F's erweitert wird.
Meißtens wird mit 0en erweitert.

Leider steckt die Funktion, die die Daten liefert in einer DLL die nicht von mir geändert werden kann.

Da wird mir nichts anderes übrog bleiben als die Daten auszumaskieren.

Danke für die Information.
Ich muss jetzt nur noch jede Menge Programme überarbeiten, die diese DLL verwenden.
C++ Forum :: MFC (Visual C++) ::  Werte werden beim Casten mit 1 initialisiert   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.