2010-11-22 2 views
0

HI,Как побитовое И (&) значение CString в MFC (VC++)?

Как сделать побитовое И (&) значение 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» не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора «

ответ

5

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

+0

@ В silico: Pls предоставляет некоторый образец. –

+0

@Swapnil Gupta: Это должно быть легко понять на основе документации 'inet_addr()' и вопроса/ответа на переполнение стека, с которым я связан. Однако я добавил несколько строк. –

+0

@ In silico: Используя этот подход, я могу узнать, находятся ли два IP-адреса в одной сети или нет? –

Смежные вопросы