📄 search.c
字号:
//*----------------------------------------------------------------------------
//* 文件名 : search.c
//* 功能描述 : 提供特殊功能的内存查找函数
//* 作者 : 龙一
//* 版本 : 1.0
//* 建立日期、时间 : 2004/07/17 09:48
//* 最近修改日期、时间 :
//* 修改原因 :
//*----------------------------------------------------------------------------
//*------------------------------ include file --------------------------------
#include "/uCOS-II/ucos_ii.h"
#include "search.h"
//*--------------------- Constants & Variable definition ----------------------
//*----------------------------------------------------------------------------
//* 函数名称 : MemSearch
//* 功能描述 : 在指定大小的内存区域查找数据,该函数可以查找任意类型的数据
//* 入口参数 : <pvMem>[in] 指向指定的内存区域指针
//* : <u32MemSize>[in] 被检索内存区域的大小
//* : <u32Data>[in] 被检索的数据
//* : <u32DataSize>[in] 被检索的数据大小(BYTE)
//* 出口参数 : 找到则返回位置指针,否则返回值为NULL
//*----------------------------------------------------------------------------
void *MemSearch(void *pvMem, INT32U u32MemSize, INT32U u32Data, INT32U u32DataSize)
{
const INT8U *__pubAddr = pvMem;
INT8S *__pbData = (INT8S *)&u32Data;
INT32S i;
BOOLEAN __blIsMatch;
do{
__pubAddr = (INT8U*)MemChr((INT8S*)__pubAddr, *__pbData, ((INT8U *)pvMem + u32MemSize) - __pubAddr);
if(__pubAddr != NULL)
{
__blIsMatch = OS_TRUE;
for(i=1; i<u32DataSize; i++)
{
if(*(__pubAddr + i) != *(__pbData + i))
{
__blIsMatch = OS_FALSE;
break;
}
}
if(__blIsMatch)
return (void *)__pubAddr;
__pubAddr++;
}
else
break;
}while(OS_TRUE);
return NULL;
}
//*----------------------------------------------------------------------------
//* 函数名称 : MemChr
//* 功能描述 : 在指定的内存区域查找字符
//* 入口参数 : <pbMem>[in] 指向指定的内存区域指针
//* : <bBYTE>[in] 被检索的字符
//* : <u32MemSize>[in] 内存大小
//* 出口参数 : 返回找到的实际位置
//*----------------------------------------------------------------------------
INT8S *MemChr(INT8S *pbMem, INT8S bBYTE, INT32U u32MemSize)
{
INT8S *__pbNext = pbMem;
INT32S i;
for(i=0; i<u32MemSize; i++)
{
if(*(__pbNext+i) == bBYTE)
return (__pbNext + i);
}
return NULL;
}
//*----------------------------------------------------------------------------
//* 函数名称 : memstr
//* 功能描述 : 在指定的内存区域查找字符串
//* 入口参数 : <pbMem>[in] 指向指定的内存区域指针
//* : <pbStr>[in] 被检索的字符串
//* : <ulStrSize>[in] 被检索的字符串大小
//* : <ulMemSize>[in] 内存大小
//* 出口参数 : 找到则返回TRUE,否则返回FALSE
//*----------------------------------------------------------------------------
BOOLEAN memstr(INT8S *pbMem, INT8S *pbStr, INT32U u32StrSize, INT32U u32MemSize)
{
INT8S *__pbNext = pbMem;
__pbNext = MemChr(__pbNext, (INT8S)pbStr[0], u32MemSize);
while(__pbNext != NULL)
{
if(__pbNext != NULL)
{
if(strncmp(__pbNext, pbStr, u32StrSize) == 0)
return OS_TRUE;
__pbNext += 1;
__pbNext = MemChr(__pbNext, (INT8S)pbStr[0], (pbMem + u32MemSize) - __pbNext);
}
}
return OS_FALSE;
}
//*----------------------------------------------------------------------------
//* 函数名称 : memstrExt
//* 功能描述 : 在指定的内存区域查找字符串
//* 入口参数 : <pbMem>[in] 指向指定的内存区域指针
//* : <pbStr>[in] 被检索的字符串
//* : <ulStrSize>[in] 被检索的字符串大小
//* : <ulMemSize>[in] 内存大小
//* 出口参数 : 找到返回字符串所在的位置指针,否则返回NULL
//*----------------------------------------------------------------------------
INT8S *memstrExt(INT8S *pbMem, INT8S *pbStr, INT32U u32StrSize, INT32U u32MemSize)
{
INT8S *__pbNext = pbMem;
__pbNext = MemChr(__pbNext, (INT8S)pbStr[0], u32MemSize);
while(__pbNext != NULL)
{
if(__pbNext != NULL)
{
if(strncmp(__pbNext, pbStr, u32StrSize) == 0)
return __pbNext;
__pbNext += 1;
__pbNext = MemChr(__pbNext, (INT8S)pbStr[0], (pbMem + u32MemSize) - __pbNext);
}
}
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -