zoukankan      html  css  js  c++  java
  • 带通配的BM Search (只使用了坏字符表)

    // -------------------------------------------------------------------------
    // 函数		: BM_SearchPackSign
    // 功能		: 
    // 返回值	        : PBYTE 
    // 参数		: PBYTE pBuf
    // 参数		: int nBufLen
    // 参数		: BYTE *pbySignBuf
    // 参数		: int nSignSize
    // 参数		: BYTE Mask
    // 附注		: 
    // -------------------------------------------------------------------------
    int KFileTypeAnalyze::BM_SearchPackSign(unsigned char* pBuf, int nBufLen, unsigned char* pbySignBuf, int nSignLen, unsigned char Mask)
    {
    	int		BM_count = 0;
    	int		BadCharater[256];		
    
    	for(int i = nSignLen-1; i>=0; i--)
    	{
    		if(pbySignBuf[i] == Mask)
    			break;
    		BM_count++;
    	}
    
    	for(int i=0; i<256; i++)
    	{
    		BadCharater[i] = BM_count;
    	}
    
    	for(int i=nSignLen-BM_count; i<nSignLen-1; i++)
    	{
    		BadCharater[pbySignBuf[i]] = nSignLen-i-1;
    	}
    
    	int p = 0;
    	int nSkip = 0;
    	while(p<=nBufLen-nSignLen)
    	{
    		for(int j=nSignLen-1; j>=0; j--)
    		{
    			if(pbySignBuf[j] == Mask)
    			{
    				if(j==0)
    					return p;
    				continue;
    			}
    
    			if(pbySignBuf[j] != pBuf[p+j])
    			{
    				if(nSignLen-j-1 < BM_count)
    				{
    					nSkip = BadCharater[pBuf[p+j]]-(nSignLen-j-1);
    					if(nSkip <= 0)
    						nSkip = 1;
    					p += nSkip;
    				}
    				else
    				{
    					p += 1;
    				}
    
    				break;
    			}
    
    			if(j==0)
    			{
    				return p;
    			}
    		}
    	}
    
    	return -1;
    }
    

      

  • 相关阅读:
    激光雷达的数学模型
    TX2刷机踩坑
    rplidar S1测试
    cartographer 调参(2)-ROS API 文档
    ROS 包制作
    Python 文件操作
    V-REP远程控制--Python版
    V-REP 喷涂仿真
    Jeston TX2 备份
    Anaconda jupyter-notebook 添加kernel
  • 原文地址:https://www.cnblogs.com/whoiskevin/p/2577856.html
Copyright © 2011-2022 走看看