toint32 bytes c# endianness

c# - bytes - byte[] to int



Detalles sobre Endian-ness y.Net? (2)

Tengo algunas preguntas sobre la endiancia que están lo suficientemente relacionadas como para justificar ponerlas como una sola pregunta:

1) ¿Endian-ness es decidido por .Net o por el hardware?

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

3) ¿Afecta la endiancia las interacciones binarias tales como ORs, ANDs, XORs o turnos? IE ¿Cambiar una vez a la derecha siempre cambiará el bit menos significativo?

4) Lo dudo, pero ¿hay alguna diferencia en la endiancia de las diferentes versiones del framework .Net? Supongo que todos son iguales, pero he aprendido a dejar de asumir algunos de los detalles de nivel inferior como este.

Si es necesario, puedo hacer estas preguntas como diferentes, pero me imagino que cualquiera que sepa la respuesta a una de estas probablemente sepa la respuesta a todas ellas (o puede indicarme una buena dirección).


1) El hardware.

2) BitConverter.IsLittleEndian

3) La endianidad no afecta las operaciones bitwise. El desplazamiento hacia la derecha se desplaza en la dirección de bit menos significativo. ACTUALIZACIÓN del comentario de Oops: Sin embargo, el endianness sí afecta la entrada y salida binaria. Al leer o escribir valores mayores que un byte (p. Ej., Leer un int desde un BinaryReader o usar BitConverter ), debe tener en cuenta la endianidad. Una vez que los valores se leen correctamente, todas las operaciones a nivel de bits actúan como normales.

4) La mayoría de las versiones de .NET son little endian. Las excepciones notables incluyen la XBox y algunas plataformas compatibles con Mono o Compact Framework.


1) ni ni ... o puedes decir cualquiera de las dos
Fue decidido por los desarrolladores de hardware. Y debe decidir si escribe software que lea / escriba ciertos formatos de archivo sin usar bibliotecas externas.
No hay problema con endiannes si lees de un archivo
* un byte
pero tiene que decidir cómo interpretarlo en formato big o big endian si lee todos los demás tipos de datos primitivos como
* enteros,
* cuerdas,
* flota.
El hardware no ayuda aquí. El BitConverter no ayuda aquí. Solo la documentación del formato de archivo podría ayudar y, por supuesto, probar su código ...
edición: encontré una buena explicación aquí: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/