|
通过支持AT指令集的手机发送短消息(源代码)(12) szNumber[n] = szNumber[n+1]; szNumber[n+1] = c; } return( true ); } char* CGSMPhone::NumberEncode(char *pPhoneNumber) { char* szData; szData = new char[40]; memset( szData, 0, 40 ); if( pPhoneNumber[0] == '+' ) { memcpy( szData, pPhoneNumber+1, strlen(pPhoneNumber) - 1 ); } else { memcpy( szData, pPhoneNumber, strlen(pPhoneNumber) ); } if( strlen( szData ) % 2 != 0 ) { szData[strlen(szData)] = 'F'; } char c; for( int n = 0; n < int(strlen(szData)); n += 2 ) { c = szData[n]; szData[n] = szData[n+1]; szData[n+1] = c; } return szData; } DWORD CGSMPhone::PDUDecodeChn(char *pMsg, char *&pResultData) { if( pMsg == NULL ) return( 0 ); int len = strlen( pMsg ); if( len % 2 != 0 ) return( 0 ); LPWSTR lpszW = new WCHAR[len/2+1]; memset( lpszW, 0, len + 2 ); BYTE* p = (BYTE *)lpszW; int i = 0, j = 0; char szTemp[3] = {0}; while( i < len ) { if( j % 2 ) { strncpy( szTemp, pMsg + i - 2, 2 ); } else { strncpy( szTemp, pMsg + i + 2, 2 ); } sscanf( szTemp, "%x", &p[j++] ); i += 2; } len = j; pResultData = new char[len + 1]; memset( pResultData, 0, len + 1 ); WideCharToMultiByte( CP_ACP, 0, lpszW, -1, pResultData, len, NULL, FALSE ); delete [] lpszW; return( len ); } DWORD CGSMPhone::PDUDecodeEng(char *pMsg, char *&pResultData) { if( pMsg == NULL ) return( 0 ); int len = strlen( pMsg ); if( len % 2 != 0 ) return( 0 ); char psz[3] = {0}; BYTE b;
|