分享3个函数

/*********************************************************************
 * @fn      pcMemStr
 *
 * @brief   从固定长度为full_data_len的缓冲full_data里查找字符串substr
 *
 * @param   pcFixedBuffer -
 * @param   usBufferLen -
 * @param   pcSubStr -
 *
 * @return  返回DE_None (0xffffffff)表示没有找到需要的字符串,其他值为找到了需要字符串的地址
 */
char * pcMemStr(char* pcFixedBuffer, unsigned short usBufferLen, char* pcSubStr){
    if (pcFixedBuffer == NULL || usBufferLen <= 0 || pcSubStr == NULL) {
        return (char * )DE_None;
    }
    if (*pcSubStr == '\0') {
        return (char * )DE_None;
    }
    unsigned short usSubLen = strlen(pcSubStr);
    unsigned short usI;
    char* pcCurBuf = pcFixedBuffer;
    int last_possible = usBufferLen - usSubLen + 1;
    for (usI = 0; usI < last_possible; usI++) {
        if (*pcCurBuf == *pcSubStr) {
            //assert(full_data_len - i >= pcSubStr);
            if (memcmp(pcCurBuf, pcSubStr, usSubLen) == 0) {
                //found
                return pcCurBuf;
            }
        }
        pcCurBuf++;
    }
    return (char * )DE_None;
}

/*********************************************************************
 * @fn      pucMemMem
 *
 * @brief   从固定长度为usFixedDataLen的缓冲pucFixedData里查找,长度为usSubDataLen的数据pucSubData
 *
 * @param   pucFixedData - 在这里查询数据
 * @param   usFixedDataLen - 数据长度
 * @param   pucSubData - 要查询的数据
 * @param   usSubDataLen - 要查询的数据长度
 *
 * @return  返回DE_None (0xffffffff)表示没有找到需要的字符串,其他值为找到了需要字符串的地址
 */
unsigned char * pucMemMem(unsigned char * pucFixedData, unsigned short usFixedDataLen, unsigned char * pucSubData, unsigned short usSubDataLen){
    if (pucFixedData == NULL || usFixedDataLen <= 0 || pucSubData == NULL || usSubDataLen <= 0) {
        return NULL;
    }
    if (usFixedDataLen < usSubDataLen) {
        return NULL;
    }
    unsigned short usI;
    unsigned char * pucCurData = pucFixedData;
    unsigned int uiLastPossible = usFixedDataLen - usSubDataLen + 1;
    for (usI = 0; usI < uiLastPossible; usI++) {
        if (*pucCurData == *pucSubData) {
            //assert(full_data_len - i >= pcSubStr);
            if (memcmp(pucCurData, pucSubData, usSubDataLen) == 0) {
                //found
                return pucCurData;
            }
        }
        pucCurData++;
    }
    return NULL;
}

/*********************************************************************
 * @fn      usMemDel
 *
 * @brief   从固定长度为usFixedDataLen的缓冲pucFixedData里删除,长度为usDeleteDataLen的数据
 *
 * @param   pucFixedData - 在这里查询数据
 * @param   usFixedDataLen - 数据长度
 * @param   usDeleteIndex - 要删除数据相对pucFixedData的序号,0表示从头开始删除
 * @param   usDeleteDataLen - 要删除的数据长度
 *
 * @return  返回最终的pucFixedData的数据长度
 */
unsigned short usMemDel(unsigned char * pucFixedData, unsigned short usFixedDataLen, unsigned short usDeleteIndex, unsigned short usDeleteDataLen){
    unsigned short usDataLen = usFixedDataLen;
    unsigned short usRemainLen = usFixedDataLen - usDeleteDataLen - usDeleteIndex;
//    if ((usDeleteIndex + usDeleteDataLen) > usFixedDataLen) {
//        return usDataLen;
//    } else {
    if ((usDeleteIndex + usDeleteDataLen) <= usFixedDataLen) {
        memmove(&pucFixedData[usDeleteIndex],&pucFixedData[usDeleteIndex + usDeleteDataLen],usRemainLen);
        memset(&pucFixedData[usFixedDataLen - usDeleteDataLen],0,usDeleteDataLen);
        usDataLen = usFixedDataLen - usDeleteDataLen;
    }
    return usDataLen;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值