HI,
如何对MFC(VC++)中的CString值进行按位和(&)?示例:
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";
}
Run Code Online (Sandbox Code Playgroud)
我怎么能按位和对CString值做?它给出错误"'CString'没有定义此运算符或转换为预定义运算符可接受的类型"
你没有.在两个字符串上执行按位AND并没有多大意义.您需要获取IP地址字符串的二进制表示,然后您可以对它们执行任何按位操作.这可以通过首先可以轻松完成获得const char*来自CString然后将它传递给该inet_addr()函数.
基于代码段的(简单)示例.
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";
}
Run Code Online (Sandbox Code Playgroud)
字节中的字节unsigned longs与字符串表示"反转".例如,如果您的IP地址字符串是192.168.1.1,则生成的二进制文件inet_addr将是0x0101a8c0,其中:
0x01 = 10x01 = 10xa8 = 1680xc0 = 192但是,这不应该影响您的按位操作.
您当然需要包含WinSock标头(#include <windows.h>通常足够,因为它包括winsock.h)和WinSock库链接(wsock32.lib如果您包括winsock.h).
| 归档时间: |
|
| 查看次数: |
564 次 |
| 最近记录: |