Я искал SO для получения помощи, но не смог найти ответ на свой вопрос.
Ситуация: мне нужно преобразовать нотацию маски подсети "/ NN" (например, IPTABLES) в 0.0.0.0нотация cisco.
NN - это число «1» в подмаске от младшего октета до старшего.Каждый октет представляет собой 8-битные целые числа.
Возможное решение:
Создайте массив из 32 «0», заполнив последние NN-цифры «1», затем сгруппируйте в 4 октета и преобразуйте в int... маска a / 23 должна быть похожа на 0.0.1.255.
У меня вопрос, как это сделать в .NET ... Я никогда не использовал бинарную манипуляцию и преобразование.
Можете ли вы, ребята,помогите мне с этим решением?
ОБНОВЛЕНИЕ - Стивен правильно ответил!
Вот код, перенесенный на .NET
if (p.LastIndexOf("/") < 0 ) return p;
int mask= Convert.ToInt32("0"+p.Substring(p.LastIndexOf("/")+1,2));
int zeroBits = 32 - mask; // the number of zero bits
uint result = uint.MaxValue; // all ones
// Shift "cidr" and subtract one to create "cidr" one bits;
// then move them left the number of zero bits.
result &= (uint)((((ulong)0x1 << mascara) - 1) << zeroBits);
result = ~result;
// Note that the result is in host order, so we'd have to convert
// like this before passing to an IPAddress constructor
result = (uint)IPAddress.HostToNetworkOrder((int)result);
string convertedMask = new IPAddress(result).ToString();