Есть ли в сети функции преобразования в C#? Гуглинг и не находят много. : Pntohs() и ntohl() эквивалент?
ответ
IPAddress.HostToNetworkOrder
и IPAddress.NetworkToHostOrder
?
Каждый метод имеет перегрузки для 16, 32 и 64 бит целых чисел.
@jon-skeet's answer - самый точный в зависимости от вашего вопроса. Однако функции «ntoh_» и «hton_» C широко используются для перевода между little-endian and big-endian computer architectures.
Если ваше намерение выполнять преобразования порядка байт, есть BitConverter class (статический класс в основной сборке), который приносит вам более подходящий способ. Специально, когда:
- Работа с массивом байтов (широко используется в файлах или сетевых потоках).
- Detecting endianess архитектура среды исполнения.
- Преобразование базовых структур за пределы целых чисел (булевых, десятичных знаков) без приведения типов.
- Ваш код не связан с сетевыми операциями (пространство имен System.Net).
, за исключением того, что класс не имеет эквивалентной функции для htonl. Я должен был бы получить байты, отменить их, а затем преобразовать обратно – pm100
'BitConverter' не поддерживает какой-либо неродной закон. (По крайней мере, встроенный не делает этого, Джон или Марк сделали более мощным, но это делает ненужную мусорную мусорную корзину) –
Я предполагаю, что эти 2 метода выполняют одно и то же. Я отмечаю, что перегрузки предназначены только для подписанных вещей. Безопасны ли они на неподписанных вещах? – pm100
@ pm100: Вы ожидали бы, что они будут самозавершениями, да. Я не хотел бы утверждать, что для абсолютного факта, хотя :) Не уверен, что вы подразумеваете под «безопасным для неподписанных вещей» - вам нужно будет бросить сначала, после чего он не будет неподписанным ... –
first - учитывая, что значительное количество вещей, на которых они работают, будут такими вещами, как IP-адреса, которые неподписанны, это удивительно, что нет перегрузок для uint32 и т. д. Под «безопасным» я имею в виду, что я опасаюсь кастинга, подписанного без знака, возиться с битами и отбрасывая назад, в общем, это рецепт для распространения/усечения знака, ... wiednesses – pm100