//下面的代码先从IP控件内取数据,并将其存入m_BEndAddress和m_BBeginAddress内。
BYTE m_BEndAddress[4];
BYTE m_BBeginAddress[4]; UpdateData();
unsigned int b,e,i;
CIPAddressCtrl * ctrl=(CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_BEGIN);
BYTE a[4]; ctrl->GetAddress(a[0],a[1],a[2],a[3]);
for(i=0;i<4;i++)
m_BBeginAddress[i]=a[i];
ctrl=(CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_END);
ctrl->GetAddress(a[0],a[1],a[2],a[3]);
for(i=0;i<4;i++)
m_BEndAddress[i]=a[i];/////////////////////////下面的是什么意思?24、16、8都表示什么,移位操作有什么作用?
b=(m_BBeginAddress[0]<<24)+(m_BBeginAddress[1]<<16)+
(m_BBeginAddress[2]<<8)+m_BBeginAddress[3];
e=(m_BEndAddress[0]<<24)+(m_BEndAddress[1]<<16)+
(m_BEndAddress[2]<<8)+ m_BEndAddress[3];
/////////////////////还有下面的,这一句,我也不明白,255是什么意思?16又是什么?为什么左移、右移?
BYTE w=a;
TRACE("%d --%d\n",w&(255<<16),(w&(255<<16))>>16);
BYTE m_BEndAddress[4];
BYTE m_BBeginAddress[4]; UpdateData();
unsigned int b,e,i;
CIPAddressCtrl * ctrl=(CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_BEGIN);
BYTE a[4]; ctrl->GetAddress(a[0],a[1],a[2],a[3]);
for(i=0;i<4;i++)
m_BBeginAddress[i]=a[i];
ctrl=(CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_END);
ctrl->GetAddress(a[0],a[1],a[2],a[3]);
for(i=0;i<4;i++)
m_BEndAddress[i]=a[i];/////////////////////////下面的是什么意思?24、16、8都表示什么,移位操作有什么作用?
b=(m_BBeginAddress[0]<<24)+(m_BBeginAddress[1]<<16)+
(m_BBeginAddress[2]<<8)+m_BBeginAddress[3];
e=(m_BEndAddress[0]<<24)+(m_BEndAddress[1]<<16)+
(m_BEndAddress[2]<<8)+ m_BEndAddress[3];
/////////////////////还有下面的,这一句,我也不明白,255是什么意思?16又是什么?为什么左移、右移?
BYTE w=a;
TRACE("%d --%d\n",w&(255<<16),(w&(255<<16))>>16);
可以
DWORD b,e;
CIPAddressCtrl * ctrl=(CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_BEGIN);
ctrl->GetAddress(b);
ctrl=(CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_END);
ctrl->GetAddress(e);
但我只是想借些问题,了解一点位移操作,下面的这一句是什么意思?
m_BBeginSegAddress[0]=(w&(255<<24))>>24;尤其是后面的位移操作,目的是什么呀?能否给我讲讲?谢谢。。
应该是 DWORD w = b;
这个整数每8位存储一个IP地址的一个8位位组,如0x12345678,表示IP地址 0x12.0x34.0x56.0x78
而255<<24,即为0xFF000000,它和w进行与操作,结果就是这个整数w保留了最高8位值,其它置0,即
0x12000000
然后右移24位,变成0x12,表示IP地址的第一个8位位组,然后赋值给m_BBeginSegAddress[0]。