little endian conversion big and endianness

endianness - conversion - ¿Cómo verificar si un sistema es big endian o little endian?



little endian and big endian (7)

¿Cómo verificar si un sistema es big endian o little endian?


En C, C ++

int n = 1; // little endian if true if(*(char *)&n == 1) {...}

Ver también: versión Perl


En Linux, `

static union { char c[4]; unsigned long mylong; } endian_test = { { ''l'', ''?'', ''?'', ''b'' } }; #define ENDIANNESS ((char)endian_test.mylong) if (ENDIANNESS == ''l'') /* little endian */ if (ENDIANNESS == ''b'') /* big endian */


En Python:

from sys import byteorder print(byteorder)


Otro código C usando union

union { int i; char c[sizeof(int)]; } x; x.i = 1; if(x.c[0] == 1) printf("little-endian/n"); else printf("big-endian/n");

Es la misma lógica que usó Belwood.


Si está utilizando .NET: verifique el valor de BitConverter.IsLittleEndian .


Una sola línea con Perl (que debería instalarse por defecto en casi todos los sistemas):

perl -e ''use Config; print $Config{byteorder}''

Si la salida comienza con un 1 (byte menos significativo), es un sistema little-endian. Si la salida comienza con un dígito más alto (byte más significativo), es un sistema big-endian. Ver documentación del módulo de Config .


Una solución de C ++:

namespace sys { const unsigned one = 1U; inline bool little_endian() { return reinterpret_cast<const char*>(&one) + sizeof(unsigned) - 1; } inline bool big_endian() { return !little_endian(); } } // sys int main() { if(sys::little_endian()) std::cout << "little"; }