2010-03-10 4 views

ответ

37

IPAddress.HostToNetworkOrder и IPAddress.NetworkToHostOrder?

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

+0

Я предполагаю, что эти 2 метода выполняют одно и то же. Я отмечаю, что перегрузки предназначены только для подписанных вещей. Безопасны ли они на неподписанных вещах? – pm100

+0

@ pm100: Вы ожидали бы, что они будут самозавершениями, да. Я не хотел бы утверждать, что для абсолютного факта, хотя :) Не уверен, что вы подразумеваете под «безопасным для неподписанных вещей» - вам нужно будет бросить сначала, после чего он не будет неподписанным ... –

+1

first - учитывая, что значительное количество вещей, на которых они работают, будут такими вещами, как IP-адреса, которые неподписанны, это удивительно, что нет перегрузок для uint32 и т. д. Под «безопасным» я имею в виду, что я опасаюсь кастинга, подписанного без знака, возиться с битами и отбрасывая назад, в общем, это рецепт для распространения/усечения знака, ... wiednesses – pm100

0

@jon-skeet's answer - самый точный в зависимости от вашего вопроса. Однако функции «ntoh_» и «hton_» C широко используются для перевода между little-endian and big-endian computer architectures.

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

  • Работа с массивом байтов (широко используется в файлах или сетевых потоках).
  • Detecting endianess архитектура среды исполнения.
  • Преобразование базовых структур за пределы целых чисел (булевых, десятичных знаков) без приведения типов.
  • Ваш код не связан с сетевыми операциями (пространство имен System.Net).
+4

, за исключением того, что класс не имеет эквивалентной функции для htonl. Я должен был бы получить байты, отменить их, а затем преобразовать обратно – pm100

+1

'BitConverter' не поддерживает какой-либо неродной закон. (По крайней мере, встроенный не делает этого, Джон или Марк сделали более мощным, но это делает ненужную мусорную мусорную корзину) –