4

Ist es in Ordnung, über Netzwerk-Floating-Point-Werte (natürlich für korrekte Byte-Reihenfolge) zu senden und sie austauschbar auf verschiedenen CPU-Architekturen, insbesondere i386, Mips (ein paar verschiedene Kerne), PowerPC (e300, e500). Keine extrem alte Hardware.Double (s) über verschiedene CPU-Architekturen?

Verwenden von gcc 4.2.1 als Compiler mit -Os für alle Architekturen.

Angeblich soll es IEEE-754-Standard überall (es ist?), Doch wie wikipedia sagt:

Die IEEE 754-1985 viele Variationen in Implementierungen (wie die Codierung von einigen Werten und den Nachweis erlaubt bestimmter Ausnahmen). IEEE 754-2008 hat viele davon verschärft, aber es gibt noch einige Variationen (insbesondere für Binärformate).

Ich habe nicht beabsichtigt, NaNs oder andere spezielle Sachen, nur gültige Dezimalzahlen zu übergeben.

+0

Was ist falsch an Text? –

+1

Wenn Sie Text aus Performance-Gründen vermeiden, sollten Sie sich Protokollpuffer ansehen: http://code.google.com/p/protobuf/ Sie behandeln Endian-Probleme, Alignment (vs. Senden einer C-Datenstruktur) usw. Sie verwenden Fließkommazahlen unter der Annahme, dass Sender und Empfänger IEEE-754-konform sind. – KeyserSoze

Antwort

2

Wenn Sie Darstellungen von normalisierten Zahlen senden möchten, sind Sie absolut sicher in jeder modernen Architektur. Im Zweifelsfall überprüfen Sie das Architekturhandbuch. Für denormalisierte Zahlen müssten Sie überprüfen.

Natürlich müssen Sie in der Lage sein, in Byte zu distrahieren und am anderen Ende wieder zusammenzusetzen, indem Sie die korrekte Byte-Reihenfolge verwenden, aber es klingt, als ob Sie wissen, wie das geht.

Wie bereits erwähnt, können Sie nicht erwarten, dass verschiedene CPUs jeden einzelnen Teil des Standards identisch implementieren, aber das ist nicht notwendig.

Die Konvertierung von IEEE Fließkomma nach ASCII ist fehlerbehaftet; In den 1990er Jahren gab es gute Beiträge von Guy Steele und Will Clinger. Es gab eine later followup on doing it faster von Burger und Dybvig.

+0

Nur überprüft die Quelle von SQLite, die "plattformübergreifende Datenbank-Datei behauptet" - es kümmert sich nur um Byte-Reihenfolge für seine REAL-Datentyp, der im Wesentlichen ein Doppel ist. Klingt so, als ob ich sicher gehen könnte. Vielen Dank –

1

Sie fragen im Wesentlichen "Kann ich binäre Daten zwischen Systemen nahtlos übertragen". Die Antwort wäre Ja, solange die beiden Systeme dem gleichen Format zustimmen. Wenn Sie wissen, welche CPUs Sie erwarten, dann überprüfen Sie ihre IEEE-Standards und Sie sollten im Geschäft sein.

+1

Um zu überprüfen, dass ist genau das, was ich vermeiden möchte, selbst zu tun ... :) –

+0

PowerPC wird IEEE-kompatibel sein, aber es ist Motorolla Byte-Bestellung, wo als x86 ist IEEE-konform, aber Intel Byte Bestellung. – NoMoreZealots