#include "stdafx.h" #ifndef LUTOOL_CPP #define LUTOOL_CPP //截左右空格 //入口:ss 要截的字符串 //出口:ss 完成后的字符串 char * AllTrim( char * ss ) { int i,j; int len; len=lstrlen(ss); for (i=1;i='0' && ch <= '9' ) return( atoi( &ch) ); else { if( ch == 'a' || ch == 'A' ) return( 10 ); if( ch == 'b' || ch == 'B' ) return( 11 ); if( ch == 'c' || ch == 'C' ) return( 12 ); if( ch == 'd' || ch == 'D' ) return( 13 ); if( ch == 'e' || ch == 'E' ) return( 14 ); if( ch == 'f' || ch == 'F' ) return( 15 ); } return( 0 ); } DWORD StrToHex(const char *pstr, CHAR *hex) { int n = strlen( pstr ); int i = 0,j = 0; for( ;i < n;i ++,j++ ) { CHAR ntmp; hex[j] = 0; ntmp = CharHex( pstr[i] ); ntmp <<= 4; hex[j] += ntmp; i ++; ntmp = CharHex( pstr[i] ); hex[j] += ntmp; } return n/2; } void AsciiToHex( char *pszOrgRandom , char *pszDesRandom , long lLen) { char *p = (char *)pszDesRandom; //long lLen = lstrlen( (char*)pszOrgRandom); for( long i = 0; i < lLen; ++i ) { sprintf(p, "%02X", (BYTE)pszOrgRandom[i] ); p += 2; } *p=0; } /* void HexToAscii( char *pszOrgRandom , char *pszDesRandom ) { char Buf[4]; char *pDes = (char *)pszDesRandom; char *pOrg = (char *)pszOrgRandom; long lLen = lstrlen( pOrg); long lTemp; for( int i = 0; i < lLen/2; ++i ) { memcpy( Buf , pOrg+i*2 , 2 ); Buf[2] = 0; lTemp = CharHex(Buf[0])*16 + CharHex(Buf[1]); if ( i%2 == 1 ) pDes[i-1] = (char)lTemp; //倒转 else pDes[i+1] = (char)lTemp; //倒转 } pDes[i] = 0; } */ void HexToAscii( char *pszOrgRandom , char *pszDesRandom ) { char Buf[4]; char *pDes = (char *)pszDesRandom; char *pOrg = (char *)pszOrgRandom; long lLen = lstrlen( pOrg); long lTemp; for( int i = 0; i < lLen/2; ++i ) { memcpy( Buf , pOrg+i*2 , 2 ); Buf[2] = 0; lTemp = CharHex(Buf[0])*16 + CharHex(Buf[1]); pDes[i] = (char)lTemp; } pDes[i] = 0; } void ExchangeUniCode( char * pData ) { char pEx[4]; long lLen = lstrlen( pData ); for ( int i = 0 ; i< lLen/4 ; i++ ) { memcpy( pEx , pData+i*4 , 2 ); memcpy( pData+i*4 , pData+i*4+2 , 2 ); memcpy( pData+i*4+2 , pEx , 2 ); } } void ExchangeChar( char * pData ) { char pEx; long lLen = lstrlen( pData ); for ( int i = 0 ; i< lLen ; i++ ) { pEx = pData[i+1]; pData[i+1] = pData[i]; pData[i] = pEx; i = i+1 ; } } void HexToPhoneName( char * pHex , char * pName ) { char szName2[4096]; ExChar( pHex , "\""); long lLen = lstrlen( pHex ); ExchangeUniCode( pHex ); HexToAscii( pHex , szName2 ); long l = WideCharToMultiByte( CP_ACP,NULL,(LPWSTR)szName2 , lLen/4 , pName , 256 , NULL , NULL); pName[l] = 0; } void PhoneNameToHex( char * pName , char * pHex) { char szName2[4096]; char szHex2[4096]; long lLen = lstrlen( pName ); long l = MultiByteToWideChar( CP_ACP,NULL,pName,lLen, (LPWSTR)szName2 , 4096 ); szName2[l*2]=0; AsciiToHex( szName2 , szHex2 , l*2); ExchangeUniCode( szHex2 ); wsprintf( pHex , "%s" , szHex2 ); } long TwoCharToHex( char * Buf ) { return CharHex(Buf[0])*16 + CharHex(Buf[1]); } BOOL GetDeRNFromEnRN(char *pEnRN, char *pDeRN) { char RN[64]; if ( DeCodePasswd( pEnRN , RN ) ) { long lLen = lstrlen( RN ); for ( int i =0 ; i= lMin ) return lRec; } return l; } //查找指定的标志 int FoundCharEx( char * szSrc , long lSrcLen , char * pEx , long lExLen) { char pComp[128]; long lLen = lSrcLen; if ( lSrcLen <= 0 ) //如果没指定长度,则取原字符串长度 lLen = lstrlen( szSrc ); long lLen2= lExLen; if ( lLen2 <= 0 ) //如果没指定长度,则取原字符串长度 lLen2 = lstrlen( pEx ); int j =0; for ( int i =0 ; i< lLen ; i++ ) { memcpy( pComp , szSrc+i , lLen2 ); pComp[lLen2] = 0; if (!strncmp( pComp , pEx , lLen2) ) { return i+1; } } return 0; } //比较两个电话号码是否相同 BOOL StrCmpMobile( char * pNo1 , char * pNo2 ) { char szNo1[64]; char szNo2[64]; DZStr( pNo1 , szNo1 ); //倒转字符 DZStr( pNo2 , szNo2 ); ExChar( szNo1 , "+" ); //去除+号,国际标志 ExChar( szNo2 , "+" ); long lLen1 = lstrlen(szNo1 ); long lLen2 = lstrlen(szNo2 ); long lMin = lLen1>lLen2?lLen2:lLen1; return !strncmp( szNo1 , szNo2 , lMin ); } //倒转字符 void DZStr( char * pYChar , char * pDZChar ) { long lLen = lstrlen( pYChar ); for ( int i = 0 ; i< lLen ; i ++ ) { pDZChar[i] = pYChar[lLen-i-1]; } pDZChar[i] = 0; } //解开7Bit编码的字串 long DeCode7Bit(char *pSrc, char * pTag , long lSrcLen) { if ( lSrcLen <= 0 ) lSrcLen = lstrlen( pSrc ); //long lSrcLen = lstrlen( pSrc ); unsigned char c,c1; unsigned char mask1 = 0; unsigned char mask2 = 0; long TagCount = 0; long lCount = 7; for (int i=0 ; i< lSrcLen ; i++ ) { c = (unsigned char)pSrc[i]; //取得当前需要转换字符 mask2 = c>>lCount; //取得下一字符的左边的mask c1 = c<<(8-lCount); //右移取得8bit右边值 c1 = c1>>1; //因为最高位为0 c1 = c1|mask1; //合并后取得正常值 mask1 = mask2; //保存mask pTag[TagCount] = c1; TagCount ++ ; lCount -- ; if ( lCount <=0 ) { lCount = 7; pTag[TagCount] = mask1; TagCount ++ ; mask1 = 0; mask2 = 0; } } pTag[TagCount] = 0; return TagCount; } char * ExMobileGZM( char * pMobile ) { char szBuf[64]; strcpy( szBuf , pMobile ); if ( !strncmp( szBuf , "+86" , strlen("+86") ) ) { strcpy( pMobile , szBuf+3 ); return pMobile; } if ( !strncmp( szBuf , "0086" , strlen("0086") ) ) { strcpy( pMobile , szBuf+4 ); return pMobile; } if ( !strncmp( szBuf , "86" , strlen("86") ) ) { strcpy( pMobile , szBuf+2 ); return pMobile; } if ( !strncmp( szBuf , "+" , strlen("+") ) ) { strcpy( pMobile , szBuf+1 ); return pMobile; } if ( !strncmp( szBuf , "00" , strlen("00") ) ) { strcpy( pMobile , szBuf+2 ); return pMobile; } return pMobile; } #endif