Pergunta

Existem rede para funções de conversão de acolhimento em C #? Pesquisando e não encontrar muito. : P

Foi útil?

Solução

IPAddress.HostToNetworkOrder e IPAddress.NetworkToHostOrder ?

Cada método tem sobrecargas para 16, 32 e 64 bits inteiros.

Outras dicas

A resposta de

@ jon-skeet é o acordo mais precisa para a sua pergunta. No entanto, 'ntoh_' e 'hton_' C funções são extensivamente usados ??a fim de converter entre pouco-endian e grande arquiteturas de computadores -endian .

Se a sua intenção é para executar endianess conversões rel , há um classe BitConverter (classe estática no núcleo de montagem) que traz a você uma forma mais adequada. Especialmente quando:

  • Trabalho com matriz de bytes (amplamente utilizado em fluxos de arquivo ou de rede).
  • Detectando endianess arquitetura da máquina de tempo de execução .
  • Conversão de estruturas básicas para além inteiros (booleans, decimais) sem typecasting.
  • O seu código não está relacionado com as operações de rede (System.Net namespace).

O pacote System.Memory NuGet inclui a classe System.Buffers.Binary.BinaryPrimitives estática, que inclui métodos estáticos para lidar com "endianness", incluindo muitas sobrecargas de ReverseEndianness. No núcleo dotnet, HostToNetWorkOrder é implementado usando esses métodos ReverseEndianness. Em um little-endian arquitetura (que eu acho que é tudo o que suporte .NET) métodos HostToNetworkOrder e ReverseEndianness têm desempenho idêntico em dotnetcore.

No quadro dotnet (net461) no entanto, o desempenho de chamar HostToNetworkOrder é um pouco (não muito 2x) mais lento do que chamar ReverseEndianness.

Eu acredito que o compilador JIT é realmente embalagem especial estes métodos para invocar a instrução bswap x86. Se você duplicar exatamente a implementação do método ReverseEndianness(long) em sua própria base de código, será quase 4x mais lento do que chamar a implementação System.Memory; sugerindo que há acontecimento mágico JIT.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top