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 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";
}