Du bist nicht angemeldet.

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

simbad

unregistriert

21

20.03.2013, 16:16

Wenn du dich auf Little-Endian Maschinen einschränkst, was ungefähr alle PCs sind, dann brauchst du das nicht.
Wenn ich gewusst hätte, das daraus eine so riesige, völlig am Thema vorbeigehende Diskussion entsteht, hätte ich das nichtmal erwähnt.

22

20.03.2013, 16:32

Wenn du dich auf Little-Endian Maschinen einschränkst, was ungefähr alle PCs sind, dann brauchst du das nicht.


Welche bekannten Geräte / Gerätearten verwenden denn Big-Endian?

Yannic

unregistriert

23

20.03.2013, 16:36

Die Xbox 360 zum Beispiel.

simbad

unregistriert

24

20.03.2013, 16:49

Willst du also eine Anwendung schreiben, die sowohl auf der XBox als auch auf dem PC läuft und die beiden untereinander Datenaustauschen, musst du dir darüber auf der Anwendungsebene oder eben eins drunter im Presentation-Layer gedanken machen.
Die Basis-Kommunikation über UDP oder TCP/IP ist davon unberührt, da dort durch die Network-Byte Order und den entsprechenden Normen sichergestellt ist, das die sich verstehen. Du kannst das Re-Ordering dann in der Anwendung regeln, was blöd wäre, weil du, vergisst du es mal, den Fehler schwer findest, oder du machst einen Presentation-Layer dazwischen der das zentral regelt und der funktioniert der erstmal, dafür sorgt, das du nicht in der Anwendung darüber nachdenken musst.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

25

20.03.2013, 16:57

Genau das sag ich ja, das Missverständnis hier entstand daraus, dass wir verschiedene Ansichten darüber haben, was "Anwendung" genau bedeutet. Für mich beginnt die Anwendung hier auf OSI Layer 5... ;)

Alignment und Padding sind zwei Dinge, die man geschickt durch ein alignment 1, wie immer das beim übersetzen eingeschaltet wird, entsorgen kann. Für einfache Events ist dann also sizeof() und memcpy() durchaus eine adäquate Lösung.

Es gibt aber in Standard C und Standard C++ keinen Weg das Struct Packing auf 1 zu stellen. Natürlich gibt es oft plattformspezifische Möglichkeiten, aber nicht jede Architektur unterstützt überhaupt Unaligned Memory Access...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (20.03.2013, 17:03)


26

20.03.2013, 17:12

Du kannst das Re-Ordering dann in der Anwendung regeln, was blöd wäre, weil du, vergisst du es mal, den Fehler schwer findest, oder du machst einen Presentation-Layer dazwischen der das zentral regelt und der funktioniert der erstmal, dafür sorgt, das du nicht in der Anwendung darüber nachdenken musst.


Deswegen würde ich es direkt in mein Framework einbauen wollen. Nur fehlt mir genau dafür der Ansatz :)

simbad

unregistriert

27

21.03.2013, 07:55

Genau das sag ich ja, das Missverständnis hier entstand daraus, dass wir verschiedene Ansichten darüber haben, was "Anwendung" genau bedeutet. Für mich beginnt die Anwendung hier auf OSI Layer 5... ;)

Alignment und Padding sind zwei Dinge, die man geschickt durch ein alignment 1, wie immer das beim übersetzen eingeschaltet wird, entsorgen kann. Für einfache Events ist dann also sizeof() und memcpy() durchaus eine adäquate Lösung.

Es gibt aber in Standard C und Standard C++ keinen Weg das Struct Packing auf 1 zu stellen. Natürlich gibt es oft plattformspezifische Möglichkeiten, aber nicht jede Architektur unterstützt überhaupt Unaligned Memory Access...

Packing ist sicherlich kein Bestandteil des Standards. Was aber auch egal ist. Denn du musst es ja irgendwann mit einem Compiler übersetzen. Und dort kannst du das dann einstellen. Klar. Der Nachteil ist, sollte eine Architektur nicht zum Format passen, dann geht das nicht mehr.

Aber .... und das ändert an meiner Aussage überhaupt nichts, für einfache Kommunikation reicht auch das. Dann gibt es eben keinen XBox support. Es ist und bleibt eine Frage der Anforderungen. Es muss definiert sein, zwischen welchen Plattformen kommuniziert werden soll. Diese Festlegung macht man entweder explizit indem man dies niederschreibt, oder implizit durch die Art der Realisierung, wobei das nicht der reinen Lehre vom Requirement-Engineering entsprechen würde.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

28

21.03.2013, 08:03

Der letzte Absatz ist aber genau das, was dot schon viel früher gesagt hat.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

simbad

unregistriert

29

21.03.2013, 08:16

Der letzte Absatz ist aber genau das, was dot schon viel früher gesagt hat.

Nö.

simbad

unregistriert

30

21.03.2013, 08:24

Ich würde ein Byte mit Flags vorne ranstellen in dem es ein Bit gibt, das markiert ob die Daten gerade als Little-Endian oder Big-Endian ankommen.
Mit einer XOR verknüpfung der eigenen Byte-Order bekommt man heraus ob man ein Re-Ordering machen muss oder nicht.

Damit kannst du dann auf unterschiedliche Routinen zum Auspacken verzweigen.
z.B. Unpack() und UnpackSwapped()

Werbeanzeige