用串口 + WAVECOM WISMO2C2-G900/1800搞手机短信编程。用TEXT方式,利用AT命令发送英文短信息成功。可是TEXT方式无法发送中文短信!!!!!所以必须采用了PDU模式,可是PDU模式的编码我弄不明白。谁能把下面delphi对中文进行编码的代码帮我改成VC++的或者C、C++的?我不会DELPHI地
http://www.ccw.com.cn/htm/app/aprog/01_6_11_3.asp周一就要完活啊,上头压的紧啊
http://www.ccw.com.cn/htm/app/aprog/01_6_11_3.asp周一就要完活啊,上头压的紧啊
解决方案 »
- 看看两段代码哪个比较好??
- 高手们请进: 一个挺简单的问题 ?????
- [求助]关于类型转换的问题,PostMessage中的wparam如何转化为CString。
- 大家聊(2)
- 请看我写的代码,为什么我不能在console程序中实现序列化??
- 难道就真的没人帮我写个Makefile吗,在次沿街乞讨
- directshow求助
- IThumbnailProvider 如何使用???
- 在VC++中使用ADO绑定到数据表进行操作,但如何能用它来操作同一库中的另一张表呢?难道又要一个类?哪位大侠有经典的ADO使用例子,可否给我一份? [email protected]
- 再问,那里有做键盘钩子的详细资料或代码
- 一简单问题:应如何初始化这个CBitmap对象
- 谁能给我解释一下这句话,拜托了
//返回值:输出数据的长度(字节)
int CCode::AscIIEtoS(LPCSTR lpEBuf,int nECount,LPBYTE lpSBuf)
{
BYTE byTemp;
int j,i;
i=0;
if(nECount <= 0)
return 0;
for(j=0 ;j< nECount;j++)
{
//第8的整数个特殊处理
if((j+1) %8 ==0)
{
i=0;
*(lpSBuf+j)=0x00;
continue;
}
//右移,高位留出补位位置
*(lpSBuf+j) =*(lpEBuf+j) >> i;
if(j == nECount -1)
break;
byTemp = *(lpEBuf+j+1);
//取要添到前一字节的几位
byTemp <<=(8-i-1);
//合并
*(lpSBuf+j) =*(lpSBuf+j) + byTemp;
i++;
}
//去除移位流下的空位子,即0x00
LPBYTE lpbTemp = new BYTE[nECount];
memcpy(lpbTemp,lpSBuf,nECount);
i=0;
for(j=0;j< nECount;j++)
{
//第8的整数个特殊处理
if((j+1) % 8 == 0)
continue;
*(lpSBuf+i) = *(lpbTemp+j);
i++;
}
delete [] lpbTemp;
memset(lpSBuf+i,0,nECount-i);
return i;
}
//从GB2312到UCS2的转换函数
//返回值是:转换结果的数量(以wchar计算)
int CCode::GBToUCS2(LPCSTR lpGBBuf,int nGBCount,LPWSTR lpUCSBuf,int nUCSCount)
{
return MultiByteToWideChar(CP_ACP, // code page
MB_PRECOMPOSED, // character-type options
lpGBBuf, // string to map
nGBCount, // number of bytes in string
lpUCSBuf, // wide-character buffer
nUCSCount // size of buffer
);
}
//返回值:输出数据的长度(字节)
int CCode::AscIIStoE(const LPBYTE lpSBuf,int nSCount,LPSTR lpEBuf)
{
BYTE bySrc[8];
BYTE by1;
int i,n;
int j=0; //lpSBuf 记数
int k=0; //lpEBuf 记数
BOOL bExit = FALSE; //退出标志
while(1)
{
for(i=0;i<8;i++)
{
if(j > nSCount -1)
{
bExit = TRUE;
break;
}
else
if(i == 7)
bySrc[i] = 0x00;
else
{
bySrc[i] = * (lpSBuf+j);
j++;
}
}
n=i;
if(n == 7)
n++;
for(i=0;i<n;i++)
{
if(i != 0)
{
by1 = bySrc[i];
by1 = by1 << (i+1);
by1 = by1 >> 1;
by1 = by1 + (bySrc[i-1] >> (8-i));
* (lpEBuf + k) = by1;
}
else
* (lpEBuf + k) = bySrc[i] & 0x7F; //01111111
k++;
}
if(bExit)
{
* (lpEBuf + k) = '\0';
break;
}
}
return k;
}
int CCode::UCS2ToGB(LPBYTE lpUCSBuf,int nByteCount,LPSTR lpGBBuf,int nGBCount)
{
//先要把字节数组 lpUCSBuf 变成宽字符数组
int i,nResult;
LPWSTR lpNewUCSBuf = new unsigned short[nByteCount/2];
for(i=0;i<nByteCount/2;i++)
{
* (lpNewUCSBuf +i) = * (lpUCSBuf +2*i);
* (lpNewUCSBuf +i) <<= 8;
* (lpNewUCSBuf +i) += * (lpUCSBuf +2*i+1);
}
nResult = WideCharToMultiByte(CP_ACP,
WC_COMPOSITECHECK,
lpNewUCSBuf,
nByteCount/2,
lpGBBuf,
nGBCount,
NULL,
NULL
);
delete [] lpNewUCSBuf;
return nResult;
}这四个函数足以完成编解码的工作
要注意,消息中只要含有GB字符,就全要按汉字来处理
password:www.delphibaby.com
http://www.pxh.de/fs/gsmlib/
(在编译库库的时候你需要把/O2的C/C++优化项去掉,否则有C1001错误。)
其中一个SMS SENDER完全满足了我的需求:
http://www.pxh.de/fs/gsmlib/doc/index.html
可是我运行这个程序smssender -d COM1 -t 9600 1303xxxxxxx "中文SMS"<CR>结果对方手机上显示为空。SMS是收到了·#¥%·#¥%!谁帮我看看那个库?大家一起研究一下如何利用那个库发送中文短信息?这个库实在是太强大了,什么功能都有。
不知道可不可以用unicode.
msn messager是[email protected]
还是 PDU MODE + 编码过的UCS2短消息内容 支持中文啊?