2010-04-09 15 views

Respuesta

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

Ver Perl documentation.

+1

+1 Esta es claramente la forma "correcta" de hacerlo. La otra forma es (aunque intuitiva) simplemente hacky. :-P –

+0

Es cierto, aunque para obtener una respuesta booleana a la pregunta "¿este sistema es grande/poco endian?" necesitaría hacer más análisis sobre el valor devuelto por el módulo de configuración. – Sean

+3

@Sean: el problema es que (como lo señala la documentación referenciada), la respuesta no es binaria; también hay un orden 'extraño' (en teoría) para máquinas como PDP-11 que usan '3412' como orden de bytes - que no es ni big-endian ni little-endian. Si el primer byte es 1, puede suponer (con moderada seguridad) que es poco endian; si es 4 u 8, puedes asumir big endian; y si no es ninguno de estos, entonces tal vez es hora de obtener una máquina más nueva. –

4

Creo que se puede hacer:

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

Esto puede fallar si el sistema dispone de un estándar (ni grande ni ascendente hacia la izquierda ascendente hacia la izquierda) el orden de bytes (por ejemplo PDP-11).

+0

Esa iba a ser mi sugerencia también. :) Excepto que usaría algo con más bits rellenos que solo el 1 binario. – Axeman

Cuestiones relacionadas