c# htonl

c# - ntohs() y ntohl() equivalente?



htonl (3)

El paquete de nuget System.Memory incluye la clase estática System.Buffers.Binary.BinaryPrimitives , que incluye métodos estáticos para tratar el "endianness", incluidas muchas sobrecargas de ReverseEndianness . En el núcleo HostToNetWorkOrder , HostToNetWorkOrder se implementa utilizando estos métodos ReverseEndianness . En una arquitectura little-endian (que creo que es todo lo que es compatible con .NET) los métodos HostToNetworkOrder y ReverseEndianness tienen un rendimiento idéntico en dotnetcore.

Sin embargo, en el framework dotnet (net461), el rendimiento de las llamadas a HostToNetworkOrder es un poco más lento (no del todo 2x) que al de ReverseEndianness .

Creo que el compilador JIT es en realidad una carcasa especial de estos métodos para invocar la instrucción BSWAP x86. Si duplica exactamente la implementación del método ReverseEndianness(long) en su propio código base, será casi 4 veces más lento que llamar a la implementación de System.Memory ; sugiriendo que hay magia JIT sucediendo

¿Hay funciones de conversión de red a host en C #? Google y no encontrar mucho. :PAG



La respuesta de @ jon-skeet es la más precisa según su pregunta. Sin embargo, las funciones ''ntoh_'' y ''hton_'' C se usan ampliamente para traducir entre arquitecturas de computadora little-endian y big-endian .

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

  • Trabajar con una matriz de bytes (ampliamente utilizada en archivos o flujos de red).
  • Detectando la arquitectura endianess de la máquina runtime.
  • 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).