ntohs () и ntohl () эквивалентны? - PullRequest
30 голосов
/ 10 марта 2010

Есть ли в C # функции преобразования в сеть? Погуглил и не нашел много. : P

Ответы [ 3 ]

39 голосов
/ 10 марта 2010

IPAddress.HostToNetworkOrder и IPAddress.NetworkToHostOrder?

Каждый метод имеет перегрузки для 16-, 32- и 64-разрядных целых чисел.

1 голос
/ 19 февраля 2014

@ jon-skeet's answer является наиболее точным ответом на ваш вопрос. Однако функции 'ntoh_' и 'hton_' C широко используются для перевода между архитектурами с прямым порядком байтов и с прямым порядком байтов .

Если вы намерены выполнить преобразование с прямым порядком байтов , существует класс BitConverter (статический класс в базовой сборке), который предоставляет вам более подходящий способ , Особенно когда:

  • Работа с массивом байтов (широко используется в файловых или сетевых потоках).
  • Обнаружение порядка байтов Архитектура машины времени выполнения.
  • Преобразование базовых структур за целые числа (логические значения, десятичные дроби) без приведения типов.
  • Ваш код не связан с сетевыми операциями (пространство имен System.Net).
0 голосов
/ 26 июня 2018

Пакет System.Memory содержит статический класс System.Buffers.Binary.BinaryPrimitives, который включает статические методы для работы с "порядком байтов", включая многие перегрузки ReverseEndianness. В ядре dotnet HostToNetWorkOrder реализован с использованием этих ReverseEndianness методов. В архитектуре с прямым порядком байтов (которая, я думаю, поддерживает все .NET) методы HostToNetworkOrder и ReverseEndianness имеют одинаковую производительность на dotnetcore.

В DotNet Framework (Net461), однако, производительность вызова HostToNetworkOrder немного (не совсем в 2 раза) медленнее, чем вызов ReverseEndianness.

Я полагаю, что JIT-компилятор на самом деле особый, в котором эти методы используются для вызова инструкции BSWAP x86. Если вы точно продублируете реализацию метода ReverseEndianness(long) в своей собственной кодовой базе, это будет почти в 4 раза медленнее, чем вызов реализации System.Memory; предполагая, что происходит магия JIT.

...