Pergunta
Existem rede para funções de conversão de acolhimento em C #? Pesquisando e não encontrar muito. : P
Solução
IPAddress.HostToNetworkOrder
e IPAddress.NetworkToHostOrder
?
Cada método tem sobrecargas para 16, 32 e 64 bits inteiros.
Outras dicas
@ 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.