У вас нет. Формирование побитно-И на две строки не имеет большого смысла. Вам нужно получить двоичные представления строк IP-адреса, затем вы можете выполнять любые побитовые операции над ними. Это можно легко сделать сначала obtaining a const char*
from a CString
, а затем передать его the inet_addr()
function.
Пример (простой), основанный на фрагменте кода.
CString NASServerIP = "172.24.15.25";
CString SystemIP = " 142.25.24.85";
CString strSubnetMask = "255.255.255.0";
// CStrings can be casted into LPCSTRs (assuming the CStrings are not Unicode)
unsigned long NASServerIPBin = inet_addr((LPCSTR)NASServerIP);
unsigned long SystemIPBin = inet_addr((LPCSTR)SystemIP);
unsigned long strSubnetMaskBin = inet_addr((LPCSTR)strSubnetMask);
// Now, do whatever is needed on the unsigned longs.
int result1 = NASServerIPBin & strSubnetMaskBin;
int result2 = SystemIPBin & strSubnetMaskBin;
if(result1==result2)
{
cout << "Both in Same network";
}
else
{
cout << "Not in same network";
}
байт в unsigned longs
являются «обратными» из строки представления. Например, если ваша строка IP-адрес 192.168.1.1
, полученный двоичный из inet_addr
будет 0x0101a8c0
, где:
0x01
= 1
0x01
= 1
0xa8
= 168
0xc0
= 192
Это не должно влиять на ваши побитовые операции.
Вы, конечно, нужно включить заголовок WinSock (#include <windows.h>
обычно бывает достаточно, так как она включает в себя winsock.h
) и ссылку на библиотеку WinSock (wsock32.lib
, если вы в том числе winsock.h
).
@ В silico: Pls предоставляет некоторый образец. –
@Swapnil Gupta: Это должно быть легко понять на основе документации 'inet_addr()' и вопроса/ответа на переполнение стека, с которым я связан. Однако я добавил несколько строк. –
@ In silico: Используя этот подход, я могу узнать, находятся ли два IP-адреса в одной сети или нет? –