|
通过支持AT指令集的手机发送短消息(源代码)(13) int i = 0, j = 0; BYTE* pTemp; pTemp = new BYTE[len / 2]; memset( pTemp, 0, len / 2 ); while( i < len ) { strncpy( psz, pMsg + i, 2 ); sscanf( psz, "%x", &b ); pTemp[j++] = b; i += 2; } len = j; i = 0; j = 0; pResultData = new char[len+20]; memset( pResultData, 0, len+20 ); char* pCur = pResultData; while( i < len ) { if( i == 0 ) { pCur[0] = pTemp[i] & 0x7F; } else { pCur[0] = ( pTemp[i] << j pTemp[i-1] >> (8 - j) ) & 0x7F; } pCur ++; i += 1; j = ( j + 1 ) % 8; if( j == 0 ) i --; } pCur[0] = pTemp[i-1] >> (8 - j); delete [] pTemp; return( pCur - pResultData ); } DWORD CGSMPhone::PDUEncodeChn(char *pMsg, char *&pResultData) { int nLen = MultiByteToWideChar(CP_ACP, 0, pMsg, -1, NULL, NULL); LPWSTR lpszW = new WCHAR[nLen]; MultiByteToWideChar(CP_ACP, 0, pMsg, -1, lpszW, nLen); DWORD dwResultSize = (nLen-1)*sizeof(WCHAR)*2; pResultData = new char[dwResultSize]; char szTemp[3] = {0}; for( int i = 0, j = 0; j < nLen-1; j++ ) { sprintf( szTemp, "%.2X", HIBYTE(lpszW[j]) ); CopyMemory( pResultData + i, szTemp, 2 ); i += 2; sprintf( szTemp, "%.2X", LOBYTE(lpszW[j]) ); CopyMemory( pResultData + i, szTemp, 2 ); i += 2; } delete [] lpszW; return( dwResultSize / 2 ); } DWORD CGSMPhone::PDUEncodeEng(char *pMsg, char *&pResultData) { if( pMsg == NULL ) return( 0 ); int nMsgLen = strlen( pMsg ); pResultData = new char[nMsgLen * 2]; memset( pResultData, 0, nMsgLen * 2 ); char* pCur = pResultData;
|