¿Cómo comprobar si un sistema es big endian o little endian?¿Cómo comprobar si un sistema es big endian o little endian?
Respuesta
Si está utilizando .NET: verifique el valor de BitConverter.IsLittleEndian
.
Otro código C utilizando la unión
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 misma lógica que Belwood utiliza.
Creo que esto no cumple con las normas: sin embargo, es posible que solo lea el campo de una enumeración que escribió por última vez, ya que de lo contrario es posible un comportamiento indefinido, ¿o estoy equivocado? – worenga
uniones no especifica "justificar" en estándar. Esta no es la solución correcta (puede funcionar accidentalmente en un OS/compilador específico). – jaskmar
¿Pueden algunos explicar la lógica en el programa anterior? Si inicializa la variable miembro i, con x.1 = 1, entonces ¿cómo x.c [0] se está convirtiendo en 1. ¿Me falta algún punto aquí? Entiendo que la unión toma la memoria del tipo de datos más grande y, dependiendo de eso, podemos acceder a él. Solo se puede acceder a un miembro. Cualquier respuesta será muy apreciada –
A C solución ++:
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";
}
'reinterpret_cast' no se puede usar dentro de una expresión constante. –
@ T.C. Gah! Demasiado. Thnx :) – Galik
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 qué se diferencia de la versión de Neeraj? –
En Python:
from sys import byteorder
print(byteorder)
Siento que esta es la respuesta más simple y mejor, ¡gracias! – mdandr
A de una sola línea con Perl (que debe ser instalado 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. Consulte la documentación del módulo Config.
- 1. C# little endian o big endian?
- 2. Little endian Vs Big endian
- 3. Little/Big Endian
- 4. Big-endian vs. little-endian machines
- 5. Confusión en htons- little endian/big endian
- 6. Averiguar si el sistema es little endian o big endian con perl
- 7. Big endian o Little endian en la red?
- 8. ¿Hay alguna forma de compilar y ejecutar un programa como big-endian en little endian pc?
- 9. Convertir big endian a little endian al leer de un archivo binario
- 10. Forma rápida de intercambiar bytes en un array de big endian a little endian en C#
- 11. Node.JS Big-Endian UCS-2
- 12. Servidor SQL binario (128) convertir de little endian a big endian
- 13. Conversión de los valores de flotación de big endian a little endian
- 14. Little endian data y sha 256
- 15. Entero con signo Little-Endian
- 16. ¿Por qué es x86 little endian?
- 17. C# - Lector binario en Big Endian?
- 18. ¿Entonces en x86-64 es Big Endian?
- 19. C# Big-endian ulong de 4 bytes
- 20. ¿Cómo convierto una estructura big-endian en una pequeña estructura endian?
- 21. ¿Imitar/emular un comportamiento big-endian en C?
- 22. (java) Escribiendo en el archivo little endian
- 23. descodificación, little endian, descomprimido y matriz flotante
- 24. BinaryWriter Endian problema
- 25. IsLittleEndian reportes de campo falso, pero debe ser Little-Endian?
- 26. ¿Cómo obtener datos pequeños de endian de big endian en C# usando el método bitConverter.ToInt32?
- 27. ¿Cómo convertir una matriz de bytes int a little endian?
- 28. ¿Se requiere conversión endian para datos wchar_t?
- 29. ¿Cómo convierto un valor de orden de bytes de host a little endian?
- 30. Convertir cadena hexadecimal "little endian" a dirección IP en Python
Buena respuesta, pero esto proporciona un buen diagrama de lo que está sucediendo: http://stackoverflow.com/a/12792301/803801 – gsingh2011
Realmente es un buen diagrama, gracias por agregarlo. – belwood