2010-04-09 12 views

Antwort

20
perl -MConfig -e 'print "$Config{byteorder}\n";' 

Siehe Perl documentation.

+1

+1 Dies ist eindeutig der "richtige" Weg, dies zu tun. Der andere Weg ist (obwohl intuitiv) nur hacky. :-P –

+0

Richtig, obwohl man eine boolsche Antwort auf die Frage "Ist das System groß/little-endian?" Sie müssen weitere Analysen zu dem vom Konfigurationsmodul zurückgegebenen Wert durchführen. – Sean

+3

@Sean: Das Problem ist (wie die referenzierte Dokumentation zeigt), die Antwort ist nicht binär - es gibt auch eine "seltsame" Ordnung (in der Theorie) für Maschinen wie PDP-11, die '3412' als Byte-Reihenfolge verwenden - Das ist weder Big-Endian noch Little-Endian. Wenn das erste Byte 1 ist, können Sie (mit mäßiger Sicherheit) annehmen, dass es Little Endian ist; Wenn es 4 oder 8 ist, können Sie Big Endian annehmen; und wenn es keiner von diesen ist, dann ist es vielleicht Zeit, eine neuere Maschine zu bekommen. –

4

Ich denke, Sie tun könnten:

$big_endian = pack("L", 1) eq pack("N", 1); 

Dies könnte fehlschlagen, wenn das System mit einem Nicht-Standard (weder Big-Endian noch Little-Endian) Bytereihenfolge hat (zB PDP-11).

+0

Das sollte auch mein Vorschlag sein. :) Außer ich würde etwas mit mehr Bits als nur Binär 1 verwenden. – Axeman

Verwandte Themen