Gibt es eine Option zu finden, wenn mein System ist kleine Endian Byte-Reihenfolge oder Big Endian Byte-Reihenfolge mit Perl?Finden, ob das System Little Endian oder Big Endian mit Perl ist
11
A
Antwort
20
perl -MConfig -e 'print "$Config{byteorder}\n";'
Siehe Perl documentation.
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
+1 Dies ist eindeutig der "richtige" Weg, dies zu tun. Der andere Weg ist (obwohl intuitiv) nur hacky. :-P –
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
@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. –