Вопрос
Существует ли сеть для размещения функций преобразования в C #?Погуглил и почти ничего не нашел.:P
Решение
IPAddress.HostToNetworkOrder
и IPAddress.NetworkToHostOrder
?
Каждый метод имеет перегрузки для 16, 32 и 64-битных целых чисел.
Другие советы
Ответ @jon-skeet является наиболее точным согласно вашему вопросу.Однако функции C «ntoh_» и «hton_» широко используются для перевода между компьютерные архитектуры с прямым порядком байтов и прямым порядком байтов.
Если ваше намерение выполнять преобразования порядка байтов, Eсть Класс BitConverter (статический класс в основной сборке), который предлагает вам более подходящий способ.Особенно когда:
- Работа с массивом байтов (широко используется в файловых или сетевых потоках).
- Обнаружение порядка байтов Архитектура машины времени выполнения.
- Преобразование базовых структур помимо целых чисел (логических, десятичных чисел) без приведения типов.
- Ваш код не связан с сетевыми операциями (пространство имен System.Net).
Тот Самый Система.Память пакет nuget включает в себя System.Buffers.Binary.BinaryPrimitives
статический класс, который включает в себя статические методы для работы с "порядковым номером", включая множество перегрузок ReverseEndianness
.В ядре dotnet, HostToNetWorkOrder
реализуется с использованием этих ReverseEndianness
методы .На малоэффективной архитектуре (которая, я думаю, является единственной, поддерживающей .NET) HostToNetworkOrder
и ReverseEndianness
методы имеют одинаковую производительность на dotnetcore.
Однако в платформе dotnet (net461) производительность вызова HostToNetworkOrder
немного (не совсем в 2 раза) медленнее, чем вызов ReverseEndianness
.
Я считаю, что JIT-компилятор на самом деле специально использует эти методы для вызова инструкции BSWAP x86.Если вы точно продублируете реализацию ReverseEndianness(long)
метод в вашей собственной кодовой базе, это будет почти в 4 раза медленнее, чем вызов System.Memory
реализация;предполагая, что происходит JIT-магия.