2010-07-02 10 views
23

Tengo algunas preguntas sobre endian-ness que están lo suficientemente relacionadas que justifico ponerlas en una sola pregunta:Detalles sobre Endian-ness y .Net?

1) ¿Es endian-ness decidido por .Net o por el hardware?

2) Si el hardware lo decide, ¿cómo puedo averiguar qué endian es el hardware en C#?

3) ¿El endianismo afecta a las interacciones binarias, como OR, AND, XOR o cambios? ES DECIR. ¿Cambiará una vez a la derecha para cambiar el bit menos significativo?

4) Lo dudo, pero ¿hay alguna diferencia en el endian-ness de las diferentes versiones de .Net framework? Supongo que todos son iguales, pero aprendí a dejar de suponer algunos de los detalles de nivel inferior como este.

Si es necesario, puedo formular estas preguntas como diferentes, pero creo que cualquiera que conozca la respuesta a una de estas probablemente sepa la respuesta a todas ellas (o me puede orientar en una buena dirección).

Respuesta

26

1) El hardware.

2) BitConverter.IsLittleEndian

3) Endianness no afecta operaciones bit a bit. El desplazamiento hacia la derecha está cambiando en la dirección de bit menos significativo. ACTUALIZACIÓN del comentario de Oops: Sin embargo, la endianidad afecta la entrada y salida binarias. Al leer o escribir valores de un tamaño mayor que un byte (por ejemplo, leyendo int desde BinaryReader o usando BitConverter), debe tener en cuenta el endianness. Una vez que los valores se leen correctamente, todas las operaciones a nivel de bit actúan normalmente.

4) La mayoría de las versiones de .NET son poco endian. Excepciones notables incluyen el Xbox y algunas plataformas compatibles con Mono o Compact Framework.

+2

No estoy seguro # 4 es del todo correcto. Por ejemplo, .Net Compact Framework se ejecuta en muchos dispositivos, supongo que algunos de ellos son grandes endian. Y Mono (aunque no .NET, pero una implementación válida de CLR) ciertamente se ejecuta en plataformas de gran tamaño. Creo que Corey estaba preguntando si la endianidad difiere con las versiones incrementales de .Net (por ejemplo, 1.0 ... 4.0), la respuesta es que no, depende solo del hardware. –

+2

Voy a segundo comentario de @Mark H. La endianidad es decidida por el hardware y .Net solo usará lo que sea. Sin embargo, no hay clases en.Net dependerá de endianness particular (o al menos ninguna clase no debería :-)), por lo que en el mejor de los casos puede decir que es agnóstico, no es que tenga endianness particular. –

+0

@Mark: Actualicé la respuesta para reflejar Mono/CF. Creo que la única plataforma BE CF es XBox. –

0

1) ni tampoco ... o usted puede decir
fue elegido por los desarrolladores de hardware. Y debe decidir al respecto si escribe software que lee/escribe ciertos formatos de archivo sin utilizar bibliotecas externas.
no hay ningún problema con endianness Si se lee desde un archivo
* Un byte
pero usted tiene que decidir cómo se interprete en poca o gran formato endian si usted lee todos los demás tipos de datos primitivos como
* enteros ,
* cadenas,
* flotadores.
El hardware no ayuda aquí. El BitConverter no ayuda aquí. Sólo la documentación del formato de archivo y podría ayudar a probar su código, por supuesto ...
edición: encontrado publicidad buena explicación aquí: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/

Cuestiones relacionadas