int AddrParse::GetCskip(int id)
{
int rel;
if(M_MAXROUTER<1 || M_MAXDEPTH<1||M_MAXCHILDREN<1)//if wrong para
return -1;
if(id<0||id>M_MAXDEPTH)
return -2;
if(M_MAXROUTER ==1)//if 1 the ari is esay
{
rel = 1+M_MAXCHILDREN*(M_MAXDEPTH-id-1);
}
else if(M_MAXROUTER>1)//
{
int ml_increase=M_MAXDEPTH-id-1;
int ml_temp = 1;
if(ml_increase == -1)
{
rel=(1+ M_MAXCHILDREN-M_MAXROUTER-M_MAXCHILDREN/M_MAXROUTER)/(1-M_MAXROUTER);
}
else if(ml_increase>-1)
{
for(;ml_increase>0;ml_increase--)
{
ml_temp=M_MAXROUTER*ml_temp;
}
rel = (1+ M_MAXCHILDREN-M_MAXROUTER-M_MAXCHILDREN*ml_temp)/(1-M_MAXROUTER);
}
}
if(rel>-1)
return rel;
else return 0;
}
但是要注意的是:输入参数id为网络深度,取值为1~Depth,而对于公式的计算却是按照0~Depth-1。实际若用到Zigbee的树形路由必须写这个函数,用来计算加入节点的ip地址,然后分配给这个节点,具体的实现代码就更为复杂了!