2010-03-10 10 views

Respuesta

37

IPAddress.HostToNetworkOrder y IPAddress.NetworkToHostOrder?

Cada método tiene sobrecargas para enteros de 16, 32 y 64 bits.

+0

Supongo que estos 2 métodos hacen lo mismo. Noto que las sobrecargas son solo para cosas firmadas. ¿Están seguros en cosas sin firmar? – pm100

+0

@ pm100: Esperarías que fueran autosinversiones, sí. Sin embargo, no me gustaría afirmar eso por hecho absoluto :) No estoy seguro de lo que quiere decir con "seguro con cosas sin firmar": primero tendría que elegir el reparto, en cuyo caso no estaría sin firmar ... –

+1

primero - dado que una cantidad significativa de las cosas en las que trabajan serán cosas como las direcciones IP que no están firmadas, es sorprendente que no haya sobrecargas para uint32, etc. Con "seguro" me refiero a que soy cauteloso de enviar firmado a unsigned, jugando con bits y echando hacia atrás, en general esta es una receta para la propagación/truncamiento de la señal, ... wiednesses – pm100

0

@jon-skeet's answer es la más precisa de acuerdo a su pregunta. Sin embargo, las funciones 'ntoh_' y 'hton_' C se usan ampliamente para traducir entre little-endian and big-endian computer architectures.

Si su intención es para realizar las conversiones endianess, hay una (clase estática en el conjunto del núcleo) BitConverter class que le ofrece una manera más adecuada. Especialmente cuando:

  • Trabajo con una matriz de bytes (ampliamente utilizado en archivos o secuencias de red).
  • Detecting endianess arquitectura de la máquina en tiempo de ejecución.
  • Conversión de estructuras básicas más allá de enteros (booleanos, decimales) sin encasillar.
  • Su código no está relacionado con las operaciones de red (espacio de nombres System.Net).
+4

excepto que la clase no tiene una función equivalente a htonl. Tendría que obtener los bytes, invertirlos, luego convertir de vuelta – pm100

+1

'BitConverter' no admite ninguna endianidad no nativa. (Al menos el incorporado no lo hace, Jon o Marc hicieron uno más poderoso que lo hace, pero hacer recolecciones temporales de basura sigue siendo un desperdicio) –

Cuestiones relacionadas