Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 2 3 4 5 6 |
struct MsgNewServer { char achName[16]; //sizeof()=16 char achIP[15]; //sizeof()=15 unsigned short usPort; //sizeof()=2 ServerType Type; //sizeof()=4 }; |
Quellcode |
|
1 |
sizeof(MsgNewServer ) |
Quellcode |
|
1 2 3 4 5 6 |
struct MsgNewServer { char achName[19];//19 char achIP[15];//15 unsigned short usPort;//2 ServerType Type;//4 }; |
Quellcode |
|
1 2 3 4 5 6 |
struct MsgNewServer { char achName[20];//20 char achIP[15];//15 unsigned short usPort;//2 ServerType Type;//4 }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
#pragma pack(push, 1) struct MsgNewServer { char achName[16]; //sizeof()=16 char achIP[15]; //sizeof()=15 unsigned short usPort; //sizeof()=2 ServerType Type; //sizeof()=4 }; #pragma pack(pop) |
Zitat von »"RakNet Doku"«
Noticed the #pragma pack(push,1) and #pragma pack(pop) ? These force your compiler (in this case VC++), to pack the structure as byte-aligned. Check your compiler documentation to learn more.
C-/C++-Quelltext |
|
1 2 3 4 5 |
struct { char foo; int bar; }; |
C-/C++-Quelltext |
|
1 2 3 4 5 |
struct { int bar; char foo; }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
class Paket { char* daten; DWORD *ItemID; public: uLong alderCheck; Code code; size_t ZippedSize, realsize; unsigned short MSG, NumIDs; [...] inline void ReadHeader(char* d) { delete[] daten; daten = NULL; delete[] ItemID; ItemID = NULL; size_t offset; memcpy(&alderCheck, d, sizeof(uLong)); offset = sizeof(uLong); memcpy(&code, d + offset, sizeof(Code)); offset += sizeof(Code); memcpy(&ZippedSize, d + offset, sizeof(size_t)); offset += sizeof(size_t); memcpy(&realsize, d + offset, sizeof(size_t)); offset += sizeof(size_t); memcpy(&MSG, d + offset, sizeof(unsigned short)); offset += sizeof(unsigned short); memcpy(&NumIDs, d + offset, sizeof(unsigned short)); offset += sizeof(unsigned short); if(NumIDs) { ItemID = new DWORD[NumIDs]; memset(ItemID, 0, NumIDs * sizeof(DWORD)); } } inline void WriteHeader(char* d) { ComputeAlder(); size_t offset; memcpy(d, &alderCheck, sizeof(uLong)); offset = sizeof(uLong); memcpy(d + offset, &code, sizeof(Code)); offset += sizeof(Code); memcpy(d + offset, &ZippedSize,sizeof(size_t)); offset += sizeof(size_t); memcpy(d + offset, &realsize, sizeof(size_t)); offset += sizeof(size_t); memcpy(d + offset, &MSG, sizeof(unsigned short)); offset += sizeof(unsigned short); memcpy(d + offset, &NumIDs, sizeof(unsigned short)); offset += sizeof(unsigned short); memcpy(d + offset, ItemID, NumIDs * sizeof(DWORD)); } [...] }; |
Werbeanzeige