문제
C#에 호스트 변환 기능을하는 NET이 있습니까? 인터넷 검색과 많이 찾지 못합니다. :피
해결책
IPAddress.HostToNetworkOrder
그리고 IPAddress.NetworkToHostOrder
?
각 방법에는 16, 32 및 64 비트 정수에 대한 오버로드가 있습니다.
다른 팁
@Jon-Skeet의 답변 질문에 따라 가장 정확합니다. 그러나 'NTOH_'및 'HTON_'C 함수는 사이를 번역하기 위해 광범위하게 사용됩니다. 리틀 엔디안 및 대기업 컴퓨터 아키텍처.
당신의 의도가 있다면 Endianess 변환을 수행합니다, 이있다 비트 컨버터 클래스 (핵심 어셈블리의 정적 클래스) 더 적합한 방법을 제공합니다. 특히 :
- 바이트 배열로 작업 (파일 또는 네트워크 스트림에서 널리 사용됨).
- Endianess 감지 런타임 머신의 아키텍처.
- 기본 구조를 정수 (부울, 소수) 이상으로 변환합니다.
- 코드는 네트워크 운영 (System.net 네임 스페이스)과 관련이 없습니다.
그만큼 시스템. 메모리 Nuget 패키지에는 포함됩니다 System.Buffers.Binary.BinaryPrimitives
정적 클래스, 여기에는 "엔지니어"를 다루는 정적 방법이 포함되어 있으며, 많은 과부하를 포함합니다. ReverseEndianness
. Dotnet Core에서 HostToNetWorkOrder
이것들을 사용하여 구현됩니다 ReverseEndianness
방법. Little-Endian Architecture (.net을 지원하는 전부라고 생각합니다) HostToNetworkOrder
그리고 ReverseEndianness
메소드는 DotNetCore에서 동일한 성능을 갖습니다.
그러나 DotNet Framework (NET461)에서 호출 성능 HostToNetworkOrder
전화보다 약간 (2 배가 아닌) 느린다. ReverseEndianness
.
JIT 컴파일러는 실제로 BSWAP X86 명령어를 호출하기 위해 이러한 방법을 특수 케이싱한다고 생각합니다. 정확히 구현을 복제하면 ReverseEndianness(long)
자신의 코드베이스의 방법은 System.Memory
구현; jit 마법이 일어나고 있다고 제안합니다.