/*********************************************************************
* @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;
}
12-08
1万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-15
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交