static inline Tstring StringReplace( Tstring str, const Tstring2 & oldStr_, const Tstring3 & newStr_ ) { std::size_t pos = 0; const Tstring oldStr = oldStr_; const Tstring newStr = newStr_; while ( ( pos = str.find( oldStr, pos ) ) != Tstring::npos ) { str.replace( pos, oldStr.length(), newStr ); pos += newStr.length(); } return str; }
Tstring CSendPage::PreProcessPackeTstring(Tstring& tstrStr ) { Tstring tstrTemp, tstrRet; Tstring::size_type posLeftBracket = 0, posRightBracket = -1; posLeftBracket = tstrStr.find(_T("[")); if (posLeftBracket == Tstring::npos) { return tstrStr; } tstrRet = tstrStr.substr( 0, posLeftBracket); ParseRightBracket: DWORD dwBracketDataSize; posRightBracket = tstrStr.find(_T("]"), posLeftBracket); if (posRightBracket == Tstring::npos) { return _T(""); } dwBracketDataSize = posRightBracket - posLeftBracket -1 ; tstrTemp = tstrStr.substr(posLeftBracket + 1, dwBracketDataSize); TCHAR tszTemp[1024]; INT iInc; TCHAR tszBracket[32], tszNum[32]; TCHAR ch, *ptStr, sign; int i, j, flag; i=0, j=0, flag=0; ptStr = (TCHAR*)tstrTemp.c_str(); do{ ch = *ptStr++; if(ch == _T('+') || ch == _T('-')) { sign = ch; flag = !flag; } else if(!flag) { tszBracket[i++] = ch; }else { tszNum[j++] = ch; } }while(ch != _T('\0')); tszBracket[i] = _T('\0'); tszNum[j] = _T('\0'); //todo inc or dec the string tstrRet += Tstring(tszBracket); BYTE *pHexBuf = new BYTE[i]; DWORD dwSelHexSize = Utility::StringLib::Tstring2Hex(tszBracket, pHexBuf); switch (dwSelHexSize) { case 1: *pHexBuf += (sign == _T('+') ? _ttoi(tszNum) : 0 - _ttoi(tszNum)); break; case 2: *(WORD*)pHexBuf = htons(htons(*(WORD*)pHexBuf) + (sign == _T('+') ? _ttoi(tszNum) : 0 - _ttoi(tszNum))); break; case 4: *(DWORD*)pHexBuf = htonl(htonl(*(DWORD*)pHexBuf) + (sign == _T('+') ? _ttoi(tszNum) : 0 - _ttoi(tszNum))); break; default: delete[]pHexBuf; return _T(""); } tstrTemp = Utility::StringLib::Hex2Tstring(pHexBuf, dwSelHexSize); delete[]pHexBuf; tstrTemp = Tstring(_T("[")) + tstrTemp + (sign == _T('+') ?Tstring(_T("+")):Tstring(_T("-"))) + Tstring(tszNum) + Tstring(_T("]")); tstrStr.replace(posLeftBracket, dwBracketDataSize + 2, tstrTemp); posLeftBracket = tstrStr.find(_T("["), posRightBracket); if (posLeftBracket != Tstring::npos){ tstrRet += tstrStr.substr( posRightBracket+1, posLeftBracket - posRightBracket - 1 ); goto ParseRightBracket; }else { tstrRet += tstrStr.substr( posRightBracket+1 ); } return tstrRet; }