c语言 内存搜索,怎么在一段内存中搜索一个十六进制串
如何在一段內存中搜索一個十六進制串?
比如有長度為N,首地址為P的內存,搜索其中的內容是否包含有“001122ff”這樣的串?如何能高效搜索?謝謝
------解決方案--------------------
可以百度一下:KMP算法,BM算法。
參考:
http://www.cnblogs.com/whyandinside/archive/2012/06/03/2532651.html
------解決方案--------------------
http://bbs.csdn.net/topics/390312862
------解決方案--------------------
僅供參考char?*?__cdecl?strnstrn(const?char?*?str1,int?cnt1,const?char?*?str2,int?cnt2,int?offs)?{
char?*cp=(char?*)(str1+offs);
char?*s1,*s2;
int?nn;
if?(offs+cnt2>cnt1)?return(NULL);
while?(1)?{
s1=cp;
s2=(char?*)?str2;
nn=0;
while?(1)?{
if?(fi[nn]==0)?{
if?(*s1-*s2)?break;//
}
if?(ri[nn]==1)?rb[nn]=*s1;
s1++;
s2++;
nn++;
if?(nn>=cnt2)?return(cp);
}
cp++;
if?(cp>=str1+cnt1)?break;//
}
return(NULL);
}
------解決方案--------------------
linux下用memmem,?如果樓主的系統沒有memmem函數可以用參考FreeBSD里的這個實現
/*-
*?Copyright?(c)?2005?Pascal?Gloor?
*
*?Redistribution?and?use?in?source?and?binary?forms,?with?or?without
*?modification,?are?permitted?provided?that?the?following?conditions
*?are?met:
*?1.?Redistributions?of?source?code?must?retain?the?above?copyright
*????notice,?this?list?of?conditions?and?the?following?disclaimer.
*?2.?Redistributions?in?binary?form?must?reproduce?the?above?copyright
*????notice,?this?list?of?conditions?and?the?following?disclaimer?in?the
*????documentation?and/or?other?materials?provided?with?the?distribution.
*?3.?The?name?of?the?author?may?not?be?used?to?endorse?or?promote
*????products?derived?from?this?software?without?specific?prior?written
*????permission.
*
總結
以上是生活随笔為你收集整理的c语言 内存搜索,怎么在一段内存中搜索一个十六进制串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言编程题显示日历,C语言日历问题
- 下一篇: 如何用AutoCAD绘制窗帘?