Ты не.Выполнение побитового И в двух строках не имеет большого смысла.Вам нужно получить двоичные представления строк IP-адресов, после чего вы можете выполнять любые побитовые операции с ними.Это можно легко сделать, сначала получив const char*
из CString
, а затем передав его функции inet_addr()
.
A (простой) примерна основе вашего фрагмента кода.
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
, если вы включаете * 1042)*).