Как сделать побитовое И (&) для значений CString в MFC (VC ++)? - PullRequest
0 голосов
/ 22 ноября 2010

HI

Как сделать побитовое И (&) для значений CString в MFC (VC ++)? Пример:

CString NASServerIP = "172.24.15.25";
CString  SystemIP = " 142.25.24.85";
CString strSubnetMask = "255.255.255.0";

int result1 = NASServerIP & strSubnetMask;
int result2 = SystemIP & strSubnetMask;

if(result1==result2)
{
    cout << "Both in Same network";
}
else
{
    cout << "not in same network";
}

Как я могу сделать побитовое И на значениях CString? Ошибка выдачи, поскольку «CString» не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора »

1 Ответ

5 голосов
/ 22 ноября 2010

Ты не.Выполнение побитового И в двух строках не имеет большого смысла.Вам нужно получить двоичные представления строк 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)*).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...