문제

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 마법이 일어나고 있다고 제안합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top