C# - WinRT - преобразовать IPv4-адрес из uint в строку?

У меня есть адрес IPv4, представленный как uint, и я хотел бы преобразовать его в string (для ведения журнала).

Обычно я достигаю этого в С#, используя конструктор System.Net.IPAddress... но кажется, что System.Net.IPAddress недоступен в С# для WinRT/Windows Store. У кого-нибудь есть эквивалентный способ сделать это преобразование?

Спасибо.


person DaveUK    schedule 27.02.2014    source источник


Ответы (1)


Немного "грязно", но вроде работает

        uint ip = 0xFFDF5F4F;
        var bytes = BitConverter.GetBytes(ip);
        string res = string.Join(".", bytes.Reverse());

Выход 255.223.95.79 для этого случая.

person Jurion    schedule 27.02.2014
comment
У меня работает - спасибо! (за исключением того, что мой IP-адрес уже был в порядке хоста, поэтому я просто удалил обратный()) - person DaveUK; 27.02.2014
comment
Должно ли то же самое работать для адресов IPv6, хранящихся как uint? (если . меняется на :) - person DaveUK; 27.02.2014
comment
По определению нельзя хранить IPv6-адрес как uint :) блок имеет всего 4 байта. И я не уверен, что это будет работать даже с long или Int64. IPv6 не кодируются одинаково - person Jurion; 27.02.2014
comment
Лол, извините, мой плохой ... да, у меня есть адрес IPv6, хранящийся в байте [16]. Обычно я передал бы этот массив байтов в конструктор System.Net.IPAddress. Любые советы о том, как отформатировать этот массив байтов как строку адреса IPv6 без System.Net.IPAddress ? :) - person DaveUK; 27.02.2014
comment
Вы можете попробовать тот же метод, но я действительно не знаю, какой будет результат :) Возьмем только последнюю строку. Но я думаю, что ipv6 не форматируется побайтно - person Jurion; 27.02.2014
comment
Хорошо, спасибо... похоже, это не работает (как вы и подозревали). Это может стать моим следующим вопросом в stackoverflow :) - person DaveUK; 27.02.2014