GNU/Linux >> Tutoriales Linux >  >> Linux

Compatibilidad con Big Endian y Little Endian para ordenar bytes

En ambas plataformas tienes

para short (16 bits):htons() y ntohs()

para long (32 bits):htonl() y ntohl()

El htonll() perdido y ntohll() para long long (64 bits) podría construirse fácilmente a partir de esos dos. Vea esta implementación por ejemplo.

Actualización-0:

Para el ejemplo vinculado anteriormente, Simon Richter menciona en un comentario que no necesariamente tiene que funcionar. La razón de esto es:el compilador podría introducir bytes adicionales en algún lugar de las uniones utilizadas. Para evitar esto, es necesario empaquetar los sindicatos. Esto último podría conducir a una pérdida de rendimiento.

Así que aquí hay otro enfoque a prueba de fallas para construir el *ll funciones:https://stackoverflow.com/a/955980/694576

Actualización-0.1:

Del comentario de bames53, tiendo a concluir que el primer ejemplo vinculado anteriormente no se debe usar con C++, sino solo con C.

Actualización-1:

Para lograr la funcionalidad del *ll funciones en Linux, este enfoque podría ser el 'mejor'.


No son los mismos nombres, pero existe la misma funcionalidad.

EDITAR:Enlace archivado -> https://web.archive.org/web/20151207075029/http://msdn.microsoft.com/en-us/library/a3140177(v=vs.80).aspx

_byteswap_uint64, _byteswap_ulong, _byteswap_ushort


htons y htonl (y macros similares) son buenas si insiste en lidiar con byte sex.

Sin embargo, es mucho mejor eludir el problema enviando sus datos en ASCII o similar. Se necesita un poco más de espacio y se transmite a través de la red un poco más lentamente, pero la simplicidad y la preparación para el futuro valen la pena.

Otra opción es separar numéricamente sus int y short. Entonces usted &0xff y divide por 256 repetidamente. Esto da un formato único en todas las arquitecturas. Pero ASCII todavía tiene la ventaja porque es más fácil de depurar.


Linux
  1. RedHat y SUSE anunciaron la retirada del soporte para OpenLDAP

  2. Consejos y trucos para curl y wget

  3. Getopt, Getopts o análisis manual:¿qué usar cuando quiero admitir opciones cortas y largas?

  4. ¿Reemplazar una línea con otro contenido usando Sed y paralelo para un archivo grande?

  5. Linux:soporte general de Linux para IPv6 ¿Listo?

¿Tmux, Término y soporte de 256 colores?

Un gran cambio para Samba en Ubuntu 22.04 y cómo evitarlo

El desafío y la promesa de Big Data

Ejemplos de ciclos for y while de Bash

Interfaz de cinta para GTK y Qt

Color diferente para comando y salida