Конвертирование IP адреса в число и обратно


Всем известно, что хранение IP в виде числа это удобно, как минимум тем, что поиск по числу производится гораздо быстрее, чем по строке

Ниже приведены пару примеров конвертирования IP в число и обратно, используя стандартные .NET классы и MS SQL 2008


C#
string address = "192.168.0.1";

int intAddress = BitConverter.ToInt32(IPAddress.Parse(address).GetAddressBytes(), 0);
string ipAddress = new IPAddress(BitConverter.GetBytes(intAddress)).ToString();

Console.WriteLine(intAddress);
Console.WriteLine(ipAddress);

T-SQL
declare @address varchar(15) = '192.168.0.1'
declare @t bigint = 0

set @t = 
                          cast(PARSENAME(@address, 4) as bigint) +
                256 * cast(PARSENAME(@address, 3) as bigint) +
power(256, 2) * cast(PARSENAME(@address, 2) as bigint) +
power(256, 3) * cast(PARSENAME(@address, 1) as bigint)

SELECT @t

Результат один и тот же: 192.168.0.1 => 16820416
А в C# вы видите и обратное преобразование, класс IPAddress принимает в конструкторе числовое представление IP адреса, сформированное как раз по логике, отображенной в SQL запросе

Комментариев нет:

Отправить комментарий

Можете оставить свой комментарий