ntohs() y ntohl() equivalente?


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

 30
Author: bobber205, 2010-03-10

3 answers

IPAddress.HostToNetworkOrder y IPAddress.NetworkToHostOrder?

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

 38
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-10 20:15:10

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

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

  • Trabajando con array de bytes (ampliamente utilizado en archivos o flujos de red).
  • Detectando 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 encasillamiento.
  • Su código no está relacionado con las operaciones de red (System.Net espacio de nombres).
 1
Author: caligari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:46:28

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

En dotnet framework (net461) sin embargo, el rendimiento de llamar a HostToNetworkOrder es ligeramente (no del todo 2x) más lento que llamar ReverseEndianness.

Creo que el compilador JIT es realmente especial encapsulando estos métodos para invocar la instrucción BSWAP x86. Si duplica exactamente la implementación del método ReverseEndianness(long) en su propia base de código, será casi 4 veces más lento que llamar a la implementación System.Memory; lo que sugiere que está sucediendo JIT magic.

 0
Author: MarkPflug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-26 16:23:11