msgsend.cpp

来自「GSM Mobile收发短信」· C++ 代码 · 共 267 行

CPP
267
字号
// MsgSend.cpp: implementation of the CMsgSend class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MsgSend.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMsgSend::CMsgSend()
{

}

CMsgSend::~CMsgSend()
{

}

//变量初始化。
void CMsgSend::init()
{
	msgCentLen="08";//08:短信息中心地址长度。
	msgCentType="91";//91:短信息中心号码类型。
	msgCentNo="13054185806";//683108701305F0:短信息中心号码,由于位置上略有处理,实际号码应为:8613800731500(字母F是指长度减1)。
	msgFileHead="11";//11:文件头字节。
	msgMsgType="00";//00:信息类型.
	msgCalledLen="00";//0B:被叫号码长度。(0D)
	msgCalledType="91";//91:被叫号码类型.
	msgCalledNo="13054185806";//3176378290F9:被叫号码,经过了位移处理,实际号码为“13677328099”。	
	msgProTag="00";//00:协议标识.
	msgDMethod="00";//00:数据编码方案.
	msgMsgTime="00";//00:有效期.
	msgDataLen="00";//02:用户数据长度.
	msgSBody="00";//C834:用户数据TP-UD(TP-User-Data)“Hi”.
	msgTLen="00";
}

//C834:用户数据TP-UD(TP-User-Data)“Hi”.
void CMsgSend::set_msgSBody(CString pmsgSBody="")
{
	CUString Ret(pmsgSBody);
	int x = Ret.Length();
	int i,t;
	CString R="",T="";
	for(i=0;i<x;i++)
	{
		t=Ret[i] ;
		T.Format("%04x",t);
		R += T;
	}
	msgSBody=R;
}

//02:用户数据长度.
void CMsgSend::set_msgDataLen()
{
	//每个字符的长度为2;不能除以4;
	//并且要用16进制表示.
	msgDataLen.Format("%02x",msgSBody.GetLength()/2);
}

//00:有效期.
void CMsgSend::set_msgMsgTime(CString pmsgMsgTime)
{
	msgMsgTime=pmsgMsgTime;
}

//00:数据编码方案.
void CMsgSend::set_msgDMethod(CString pmsgDMethod)
{
	msgDMethod=pmsgDMethod;
}

//00:协议标识.
void CMsgSend::set_msgProTag(CString pmsgProTag)
{
	msgProTag=pmsgProTag;
}

//3176378290F9:被叫号码,经过了位移处理,实际号码为“13677328099”。
void CMsgSend::set_msgCalledNo(CString pmsgCalledNo)
{
	CString Ret="";
	int i;
	char c1,c2;		
	if(pmsgCalledNo.GetLength()/2==0)
	{
		temp=12;
	}
	else
	{
		temp=11;
		pmsgCalledNo += "F";
	}
	Ret = pmsgCalledNo;
	msgCalledNo="";
	for(i=0;i<Ret.GetLength();i+=2)
	{
		c1= Ret[i];
		c2= Ret[i+1];
		msgCalledNo+=c2;
		msgCalledNo+=c1;
	}		
}

//91:被叫号码类型.
void CMsgSend::set_msgCalledType(CString pmsgCalledType)
{
	msgCalledType=pmsgCalledType;
}

//0B:被叫号码长度。(0D)
void CMsgSend::set_msgCalledLen()
{
/*99
	int x=msgCalledNo.GetLength();
	x=x+1;
*/
	switch(temp)
	{
		case 4:
			msgCalledLen="04";
			break;
		case 5:
			msgCalledLen="05";
			break;
		case 6:
			msgCalledLen="06";
			break;
		case 7:
			msgCalledLen="07";
			break;
		case 8:
			msgCalledLen="08";
			break;
		case 9:
			msgCalledLen="09";
			break;
		case 10:
			msgCalledLen="0A";
			break;
		case 11:
			msgCalledLen="0B";
			break;
		case 12:
			msgCalledLen="0C";
			break;
		case 13:
			msgCalledLen="0D";
			break;
		case 14:
			msgCalledLen="0E";
			break;
		case 15:
			msgCalledLen="0F";
			break;
	}
	temp=0;
}

//00:信息类型.
void CMsgSend::set_msgMsgType(CString pmsgMsgType)
{
	msgMsgType=pmsgMsgType;
}

//11:文件头字节。
void CMsgSend::set_msgFileHead(CString pmsgFileHead)
{
	msgFileHead=pmsgFileHead;
}

//08:短信息中心地址长度。
void CMsgSend::set_msgCentLen(CString pmsgCentLen)
{
	msgCentLen=pmsgCentLen;
}

//91:短信息中心号码类型。
void CMsgSend::set_msgCentType(CString pmsgCentType)
{
	msgCentType=pmsgCentType;
}

//683108701305F0:短信息中心号码,由于位置上略有处理,实际号码应为:8613800731500(字母F是指长度减1)。
void CMsgSend::set_msgCentNo(CString pmsgCentNo)
{
	CString Ret="";
	int i;
	char c1,c2;		
	if(pmsgCentNo.GetLength()/2==0)
	{
		;
	}
	else
	{
		pmsgCentNo += "F";
	}
	Ret = pmsgCentNo;
	msgCentNo="";
	for(i=0;i<Ret.GetLength();i+=2)
	{
		c1= Ret[i];
		c2= Ret[i+1];
		msgCentNo+=c2;
		msgCentNo+=c1;
	}
}

CString CMsgSend::get_msgSend(CString Cno,CString Called,CString Body)
{
	CString Ret = "";
	//变量初始化。
	init();
	//08:短信息中心地址长度。
	set_msgCentLen("08");
	//91:短信息中心号码类型。
	set_msgCentType("91");
	//683108701305F0:短信息中心号码,由于位置上略有处理,实际号码应为:8613800731500(字母F是指长度减1)。
	set_msgCentNo(Cno);
	//11:文件头字节。
	set_msgFileHead("11");
	//00:信息类型.
	set_msgMsgType("00");
	//3176378290F9:被叫号码,经过了位移处理,实际号码为“13677328099”。
	set_msgCalledNo(Called);
	//91:被叫号码类型.
	set_msgCalledType("81");
	//0B:被叫号码长度。(0D)
	set_msgCalledLen();
	//00:协议标识.
	set_msgProTag("00");
	//00:数据编码方案.
	set_msgDMethod("08");
	//00:有效期.
	set_msgMsgTime("01");//0000A7
	//C834:用户数据TP-UD(TP-User-Data)"Hi".
	set_msgSBody(Body);
	//02:用户数据长度.
	set_msgDataLen();
	//
	Ret="0011000D9168"+msgCalledNo+msgProTag+msgDMethod+msgMsgTime+msgDataLen;
    /*
	Ret=msgCentLen+msgCentType+msgCentNo+msgFileHead+
		msgMsgType+msgCalledLen+msgCalledType+msgCalledNo+msgProTag+msgDMethod+
		msgMsgTime+msgDataLen;
	*/
	msgTLen.Format("%d",/*Ret.GetLength()/2*/15+msgSBody.GetLength()/2);//[总的信息长度,前面为BCD码;后面为UNICODE码.]
	Ret=Ret+msgSBody;
	return Ret;
}

CString CMsgSend::get_msgTLen()
{
	return msgTLen;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?