JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Material "verstecken"
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 14:41    Titel: Antworten mit Zitat

super es funktioniert Very Happy

habe einfach die struktur umschlossen:
CPP:
#pragma pack(2)
struct ZipHeader
{
    DWORD Signature;
    WORD  VersionNeeded;
    WORD  GeneralPurpose;
    WORD  CompressionMethod;
    WORD  LastModTime;
    WORD  LastModDate;
    DWORD CRC32;
    DWORD CompressedSize;
    DWORD UncompressedSize;
    WORD  FilenameLength;
    WORD  ExtraLength;
};
#pragma pack()


Hatte pack() selber ausprobiert, aber wollte net so, hatte noch pop und push drin Wink

Vielen Dank für deine schnelle Hilfe!
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 40
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 16:01    Titel: Antworten mit Zitat

Machs lieber so:

CPP:
#pragma pack( push, 1 )
struct ZipHeader
{
   DWORD Signature;
   WORD  VersionNeeded;
   WORD  GeneralPurpose;
   WORD  CompressionMethod;
   WORD  LastModTime;
   WORD  LastModDate;
   DWORD CRC32;
   DWORD CompressedSize;
   DWORD UncompressedSize;
   WORD  FilenameLength;
   WORD  ExtraLength;
};
#pragma pack( pop )
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 16:13    Titel: Antworten mit Zitat

hmm muss das dann eine 1 sein oder eine 2 bei "push, 1" ?

Was amcht dieses push und pop? Habs ind er Hilfe net verstanden :X
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 40
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 16:19    Titel: Antworten mit Zitat

Du willst doch die "tatsächliche" Größe der Struktur oder? Also richtest du nach einem Byte aus. Das push und pop hilft nur dabei die letzte Speicherausrichtung auf den vorhergehenden Wert zurückzusetzen. Pack() ohne Argumente geht von einem memoryalignment von 8 Byte aus, nutzt du den Compilerstack so kannst du auf den von dir zuletzt gesetzten Wert zurücksetzen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 16:32    Titel: Antworten mit Zitat

[Visual C++] Probleme mit Struktur-/Klassengrößen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
David
Super JLI'ler


Alter: 40
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 16:35    Titel: Antworten mit Zitat

Da isn Fehler im Beispiel:

CPP:
#pragma pack (1 , push)
struct foo
{
   float x, y, z;
   BYTE b;
};
#pragma pack (pop)


Sollte egtl sein:

CPP:
#pragma pack (push, 1)
struct foo
{
   float x, y, z;
   BYTE b;
};
#pragma pack (pop)


grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 17:02    Titel: Antworten mit Zitat

danke ihr 2 Smile
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 02.07.2007, 16:25    Titel: Antworten mit Zitat

Ich hätt da auch noch ne Frage:
Wie kann man die Funktion vom tut für unicode umschreiben ?
Oder wie kann man von wchar in char umwandeln ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 02.07.2007, 23:21    Titel: Antworten mit Zitat

Hmm ich weiss zwar nicht genau was du vor hast, aber evt. hilft dir folgendes:
http://www.codeguru.com/forum/showthread.php?t=336106 (Englisch)

Wo is der Vorteil bei der Verwendung von Unicode vs. MultiByte?
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 06.07.2007, 16:01    Titel: Antworten mit Zitat

ein moderner Weg, wchar und char gegenseitig korrekt(das obere Bsp. ist nämlich unvollständig) zu casten, ist die Verwendung eines char_casts. Den kann man sich selber schreiben und anpassen, je nachdem für C oder C++. IIRC hat GreveN oder david hier mal einen schönen char_cast geschrieben, den du per Forensuche finden kannst. Ich habe diesen Cast übr. etwas umgeschrieben, meine Version sieht flogendermaßen aus:

CPP:
#pragma warning( disable : 4996 )

// general template, will be specialized for the two common string/char types
   template<typename T_Dest, typename T_Src> inline const T_Dest char_cast( const T_Src& aSrc,  const std::locale& aLoc = std::locale::classic() );

   // string to string, do nothing
   template<> inline const std::basic_string<char> char_cast( const std::basic_string<char>& aSrc, const std::locale& aLoc )
   {
      return aSrc;
   }

   // wstring to wstring, do nothing
   template<> inline const std::basic_string<wchar_t> char_cast( const std::basic_string<wchar_t>& aSrc, const std::locale& aLoc )
   {
      return aSrc;
   }

   // string to wstring
   template<> inline const std::basic_string<wchar_t> char_cast( const std::basic_string<char>& aSrc, const std::locale& aLoc )
   {
      wchar_t* const buf = new wchar_t[ aSrc.length()+1 ];

      std::use_facet<std::ctype<wchar_t> >(aLoc).widen( aSrc.data(), &aSrc.data()[aSrc.length()], buf );

      buf[aSrc.length()] = 0;

      const std::basic_string<wchar_t> ret_str(buf);

      delete[] buf;

      return ret_str;
   }

   // wstring to string, place '*' if there's no translation
   template<> inline const std::basic_string<char> char_cast( const std::basic_string<wchar_t>& aSrc, const std::locale& aLoc )
   {
      char* const buf = new char[ aSrc.length()+1 ];

      std::use_facet<std::ctype<wchar_t> >(aLoc).narrow( aSrc.data(), &aSrc.data()[aSrc.length()], '*', buf );

      buf[aSrc.length()] = 0;

      const std::basic_string<char> ret_str(buf);

      delete[] buf;

      return ret_str;
   }

   // char to char, do nothing
   template<> inline const char char_cast( const char& aSrc, const std::locale& aLoc )
   {
      return aSrc;
   }

   // wchar_t to wchar_t, do nothing
   template<> inline const wchar_t char_cast( const wchar_t& aSrc, const std::locale& aLoc )
   {
      return aSrc;
   }

   // char to wchar_t
   template<> inline const wchar_t char_cast( const char& aSrc, const std::locale& aLoc )
   {
      return std::use_facet<std::ctype<wchar_t> >(aLoc).widen( aSrc );
   }

   // wchar_t to char, place '*' if there's no translation
   template<> inline const char char_cast( const wchar_t& aSrc, const std::locale& aLoc )
   {
      return std::use_facet<std::ctype<wchar_t> >(aLoc).narrow( aSrc );
   }

#pragma warning( default : 4996 )


Du kannst damit sowohl zwischen einfachen Zeichen (also char und wchar_t) als auch zwischen std::string und std::wstring casten. Das benutzt du dann so:
CPP:
 std::string str = "hallo";
std::wstring wstr = char_cast<std::string>( str );

// mögliche Casts (können erweitert werden durch hinzufügen weiterer
// Spezialisierungen des Grundtemplates):
char_cast<std::string>( unicode-string )
char_cast<std::wstring>( ascii-string )
char_cast<char>( unicode-zeichen )
char_cast<wchar_t>( ascii-zeichen )


btw:
GreatFlo hat Folgendes geschrieben:
Wo is der Vorteil bei der Verwendung von Unicode vs. MultiByte?

bei Unicode-Verwendung bist du unabhängiger und flexibler, d.h. dein Spiel hängt nicht von einer Sprache ab die nur das deutsche (lat.) Schriftlayout nutzt. Nebenbei sind in dem weltweiten Unicode-Zeichensatz auch Mathematische Zeichen und so dabei.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum