void CSmsWapPush::fPushcode(char *sPushNote, char * sUrl, char *sSmsStr, int *nSmsLen)
{
const int MaxBuffSize = 1024;
char sUrlAtt[MaxBuffSize] = "";
int  nUrlLen = MaxBuffSize ; 
char sPushAtt[MaxBuffSize] = "";
int  nPushLen = MaxBuffSize ; int i, nPos; strncpy(sUrlAtt, sUrl, MaxBuffSize-1);
sUrlAtt[MaxBuffSize-1] = '\0';
nUrlLen = strlen(sUrlAtt); strncpy(sPushAtt, sPushNote, MaxBuffSize-1);
sPushAtt[MaxBuffSize-1] = '\0'; USES_CONVERSION;
CString strPushAtt = A2W(sPushNote);
WideCharToMultiByte(CP_UTF8,0,strPushAtt.GetBuffer(),strPushAtt.GetLength(),sPushAtt,MaxBuffSize,NULL,NULL);
nPushLen = strlen(sPushAtt); i = 0; // add WDP header to sms strings
memcpy(sSmsStr,"\x06\x05\x04\x0b\x84\x23\xf0",7); // WDP header
i += 7; sSmsStr[i++] = 0x01; //    nPos = i;
sSmsStr[i++] = 159;
sSmsStr[i++] = 0x6a;    // utf-8 sSmsStr[i++] = nPushLen+1;  // string table length
memcpy(sSmsStr+i, sPushAtt, nPushLen); i+= nPushLen; sSmsStr[i++] = 0x00;
sSmsStr[i++] = 0x45;    // si content memcpy(sSmsStr+i, sUrlAtt, strlen(sUrlAtt));
i += strlen(sUrlAtt);
sSmsStr[nPos] += strlen(sUrlAtt); *nSmsLen = i;
}
一些无关的代码省略了,我翻译出来的程序处理英文没有问题,但是中文就不对了.
问题出在对中文的编码和长度的计算,还忘高人指点。