→ scwg:迴圈裡用到 +=, 只會正確作用在 host representation. 04/19 13:43
以下是我想出來的程式碼
mask 24-32之間的計算都正常
可是 mask小於24的時候
第三個區間的值都不會跳 (192.168.0.255 下一個應該是 192.168.1.0 但實際上又回到
192.168.0.0)
推測應該是big endian 與 little endian的問題
但想不到比較好的做法
可以請大家給點建議嗎
我的作業系統是 linux
MaskCaculator::MaskCaculator(const std::string& ip, unsigned int mask)
{
TRACE_SHOW(true);
if(mask<=0 || mask >32)
throw FRAME_EXPCEPTION_1("over the mask range");
//unsigned int _mask = inet_addr("255.255.255.255");
unsigned int _mask = 0xffffffff;
_mask = htonl(_mask << (32-mask));
unsigned int _ip = inet_addr(ip.c_str());
unsigned int _subnet = _ip & _mask;
int _count = pow(2, (32-mask));
for(int i=0; i<_count; i++)
{
_subnet += htonl(1);
m_arrIp.push_back(ToIPString(_subnet));
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.71.34