representacion network little endian ejemplos conversion big and windows endianness

windows - little - network byte order



¿Puedo suponer con seguridad que las instalaciones de Windows siempre serán de poca importancia? (2)

Estoy escribiendo un controlador de sistema de archivos del espacio de usuario en Windows y las conversiones de endianness son algo con lo que he estado lidiando, ya que este sistema de archivos en particular siempre almacena los valores en formato little-endian y se espera que el controlador los convierta (si es necesario) para la CPU. que se ejecuta en. Sin embargo, me pregunto si debo preocuparme por las conversiones de endianidad, ya que, por lo que puedo decir, Windows de escritorio solo admite arquitecturas little-endian (IA32, x86-84, etc.) y, por lo tanto, el disco. Los valores de little-endian son perfectamente finos sin conversión. ¿Es esta observación precisa y, de ser así, es generalmente aceptable suponer que Windows siempre se ejecutará en hardware little-endian? Además, ¿es posible (en 2011) ejecutar Windows en un emulador de big-endian o algo así, de tal manera que uno pueda probar los problemas de endianidad?

Edición: Para mayor claridad, la forma en que funciona mi código actualmente, hago una comprobación de endianness en el momento del inicio, y luego cada vez que carga un valor del disco, lo ejecuto a través de una función en línea que utiliza un intrínseco para cambiar la endianness si el La arquitectura es big-endian. El problema es que no sé si podría haber perdido uno o más de esos lugares donde necesitaba hacer una conversión y la forma más sencilla de ver si cometí un error es ejecutar el programa en una arquitectura de big-endian. Por lo tanto, me interesa saber (a) si es necesario realizar estas comprobaciones, ya que normalmente Windows no se ejecuta en plataformas little-endian (hoy en día de todos modos), y (b) cómo puedo probar mi código, ya que no se me ocurre una manera de ejecutar Windows en una arquitectura big-endian, y revertir manualmente todos los valores multibyte en el disco aún implica un proceso manual que bien podría arruinar.


Todas las versiones de Windows que verás son little-endian, sí. El núcleo NT en realidad se ejecuta en una arquitectura de big endian incluso hoy en día .


Editar después de cambiar la pregunta:

A) No, no es necesario verificar la endianidad si su único objetivo es Windows x86 o x64. Ni siquiera pasaría el tiempo revisando la endianidad en ese caso.

B) Si desea verificar la compatibilidad bi-endiana de su código, recomiendo dividirlo en bibliotecas que sean compilables en todas las plataformas. Luego, compile y ejecute el código en su sabor favorito de Linux que admita big-endian y vea si funciona. Todavía no he oído hablar de ningún compilador o software que pueda detectar problemas bi-endianos.

Respuesta original:

Que yo sepa, no hay versiones de Windows de escritorio o servidor que sean compatibles con big-endian. Los procesadores Itanium (que creo que siempre se llamaron IA 64, no IA32 pero podría estar equivocado) tienen la capacidad de ejecutarse en big-endian, pero Windows no lo admite.

Esto no quiere decir que Windows 8 será un poco endian, ya que Windows 8 está dirigido a los procesadores ARM.

Si por alguna razón está en Windows (#ifdef _WIN32) y big-endian, simplemente invierta las estructuras de datos cuando cargue desde el disco y siempre guarde en formato little-endian, que es mucho más común.