for(i = 0; i < len; i ++)
{
t_diff diff;
diff = m_diffArray[i];
if(start < 0)
{
    start = end = diff.addr;  //赋初值
}
int size;
size = end - start + 1;
if((diff.addr - end > 1) || (size >= 150) || len == 1)
{
    tarFile.Seek(start, CFile::begin);
    tarFile.Read(buff, size);
    // write data to comm port     start = end = diff.addr;
}
else
{
    end = diff.addr;
}
}
*/
其中len是m_diffArray变长数组的长度,下面是m_diffArray的定义,其中存的addr地址有可能连续也有可能不连续,如果数组某一段地址是连续的,我就求出start和end还有size长度,执行到//write data to comm port,如果不连续就分多次写入.现在这个算法的问题是当数组中全是连续的数据时,不执行if((diff.addr - end > 1) || (size >= 150) || len == 1),如果len==2,size的长度又为1??怎么改正啊??大家帮忙指点一下!
typedef struct
{
unsigned int addr;  //存地址
unsigned char value;//存数据
} t_diff; CArray<t_diff, t_diff &> m_diffArray;

解决方案 »

  1.   

    比如说,我现在m_diffArray[0].addr = 0x0001; m_diffArray[1].addr = 0x0002 ;m_diffArray[2] = 0x0003,我想让start = 0x0001,end = 0x0003 ,size = 3,如果这个变长数组还有m_diffArray[3].addr = 0x00ff,我想把前一部分连续的地址的起始结束地址算出,后一部分算出,然后把写串口,
    问题是现在如果只有前一部分,那if语句的条件(diff.addr - end > 1)就不符合条件了,所以不知道怎么改一下!?