📄 gsmprotocol.cpp
字号:
// GSMProtocol.cpp: implementation of the CGSMProtocol class.
//
//////////////////////////////////////////////////////////////////////
#include "..\stdafx.h"
#include "GSMProtocol.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGSMProtocol::CGSMProtocol()
{
}
CGSMProtocol::~CGSMProtocol()
{
}
/////////////////////////////////////////////////////////////////////////////////
//功能:在一个字互换低字节与高直接
//history name date remark
// wanfangjie 2003.03.20 create
//返回值:数据长度
/////////////////////////////////////////////////////////////////////////////////
int CGSMProtocol::InterchangeByteInWord(char *pSrc, char *pRes, int nDataLen)
{
int i=0;
if((nDataLen%2)!=0)
{
nDataLen-=1;
}
for(i=0;i<nDataLen;i++)
{
if((i%2)==0)
{
pRes[i+1]=pSrc[i];
}
else
{
pRes[i-1]=pSrc[i];
}
}
pRes[nDataLen]=0;
return nDataLen;
}
//////////////////////////////////////////////////////////////////
//功能:把一个字节的高四位和低四位变为两个字符,该字符为0~9或A~9
//history name date remark
// wanfangjie 2003.03.20 create
//返回值:字符串的长度
/////////////////////////////////////////////////////////////////////
int CGSMProtocol::ByteToTwoCharacter(char *pByte, char *TwoCharacter, int nDataLen)
{
char cTemp;
int nCharLen=0;
int i=0;
for(i=0;i<nDataLen;i++)
{
cTemp=(pByte[i]&0xf0)>>4;
cTemp=cTemp&0x0f;//屏蔽符号位
//0~9情况
if((cTemp>=0)&&(cTemp<=9))
{
TwoCharacter[nCharLen++]=cTemp+'0';
}
else
{
TwoCharacter[nCharLen++]=cTemp+'A'-0xa;
}
cTemp=pByte[i]&0x0f;
//0~9情况
if((cTemp>=0)&&(cTemp<=9))
{
TwoCharacter[nCharLen++]=cTemp+'0';
}
else
{
TwoCharacter[nCharLen++]=cTemp+'A'-0xa;
}
}
TwoCharacter[nCharLen]=0;
return nCharLen;
}
//////////////////////////////////////////////////////////////////////////////////
//功能:把两个字符变成一个字节,该字符的要求为,该字符为0~9或A~F
//history name date remark
// wanfangjie 2003.03.20 create
//返回值:变换后的字节
//////////////////////////////////////////////////////////////////////////////////
char CGSMProtocol::TwoCharacterToByte(char *pCharacter)
{
char cNum=0;
if(pCharacter[0]>='0'&&pCharacter[0]<='9')
{
cNum=(pCharacter[0]-'0')<<4;
}
else if(pCharacter[0]>='a'&&pCharacter[0]<='f')
{
cNum=(pCharacter[0]-'a'+10)<<4;
}
else
{
cNum=(pCharacter[0]-'A'+10)<<4;
}
if(pCharacter[1]>='0'&&pCharacter[1]<='9')
{
cNum|=(pCharacter[1]-'0');
}
else if(pCharacter[1]>='a'&&pCharacter[1]<='f')
{
cNum|=(pCharacter[1]-'a'+10);
}
else
{
cNum|=(pCharacter[1]-'A'+10);
}
return cNum;
}
//////////////////////////////////////////////////////////////////////////////////
//功能:把3位的数变为字符串
//history name date remark
// wanfangjie 2003.03.20 create
//////////////////////////////////////////////////////////////////////////////////
int CGSMProtocol::ThirdDigitNumToCharacter(int nNumber, char *pCharacter)
{
int nFirst=0;
int nSecond=0;
int nThird=0;
if(nNumber>1000)
{
nNumber=nNumber%1000;
}
if(nNumber<0)
{
pCharacter[0]=0;
return 0;
}
nFirst=nNumber/100;
nSecond=(nNumber%100)/10;
nThird=nNumber%10;
pCharacter[0]=nFirst+'0';
pCharacter[1]=nSecond+'0';
pCharacter[2]=nThird+'0';
pCharacter[3]=0;
return 1;
}
//////////////////////////////////////////////////////////////////////////////////
//功能:把电话号码转化为PDU格式
//history name date remark
// wanfangjie 2003.03.20 create
//////////////////////////////////////////////////////////////////////////////////
int CGSMProtocol::PhoneNumToPduNum(char *pPhoneNum, char *pPduNum,int nPhoneLen)
{
int i=0;
if((nPhoneLen%2)!=0)
{
strcat(pPhoneNum,"f");
nPhoneLen++;
}
for(i=0;i<nPhoneLen;i++)
{
if((i%2)==0)
{
pPduNum[i+1]=pPhoneNum[i];
}
else
{
pPduNum[i-1]=pPhoneNum[i];
}
}
pPduNum[nPhoneLen]=0;
return 1;
}
////////////////////////////////////////////////////////////////////////////////
//功能:把PDU格式电话号码转化为字符串格式
//history name date remark
// wanfangjie 2003.03.20 create
////////////////////////////////////////////////////////////////////////////////
int CGSMProtocol::PduNumToPhoneNum(char *pPhoneNum, const char *pPduNum, int nPhoneLen)
{
int i=0;
if((nPhoneLen%2)!=0)
{
nPhoneLen++;
}
for(i=0;i<nPhoneLen;i++)
{
if((i%2)==0)
{
pPhoneNum[i+1]=pPduNum[i];
}
else
{
pPhoneNum[i-1]=pPduNum[i];
}
}
pPhoneNum[nPhoneLen-1]=0;//去掉最后的F
return 1;
}
////////////////////////////////////////////////////////////////////////////////
//功能:把7位编码变为8位编码
//history name date remark
// wanfangjie 2003.03.24 create
////////////////////////////////////////////////////////////////////////////////
int CGSMProtocol::SevenBitToEightBit(char *pSevenPool, char *pEightPool, int nLen)
{
int i=0;
int nPos=0;
int nResidue=0;//余数
unsigned short siTemp;
//对最后一位的处理
pSevenPool[nLen]=0;
for(i=0;i<nLen;i++)
{
nPos=(int)(i*7/8);
nResidue=(i*7)%8;
memcpy(&siTemp,&pSevenPool[nPos],sizeof(unsigned short));
siTemp=siTemp>>nResidue;
siTemp=siTemp&0x007F;
pEightPool[i]=(char)siTemp;
}
pEightPool[nLen]=0;
return 1;
}
////////////////////////////////////////////////////////////////////////////////
//功能:字符串拷贝函数
//history name date remark
// wanfangjie 2003.09.16 create
////////////////////////////////////////////////////////////////////////////////
TCHAR* CGSMProtocol::StrCopy(TCHAR *strDest, const TCHAR *strSour)
{
TCHAR *pReturn=NULL;
#if(M_ISUNICODE==1)
{
pReturn=wcscpy(strDest,strSour);
}
#else
{
pReturn=_tcscpy(strDest,strSour);
}
#endif
return pReturn;
}
////////////////////////////////////////////////////////////////////////////////
//功能:把整性变为字符串
//history name date remark
// wanfangjie 2003.09.16 create
////////////////////////////////////////////////////////////////////////////////
TCHAR* CGSMProtocol::IntToString(int nValue, TCHAR *pString, int nRadix)
{
TCHAR *pReturn=NULL;
#if(M_ISUNICODE==1)
{
pReturn=_itow(nValue, pString, nRadix);
}
#else
{
pReturn=_itot(nValue, pString, nRadix);
}
#endif
return pReturn;
}
////////////////////////////////////////////////////////////////////////////////
//功能:字符串连接
//history name date remark
// wanfangjie 2003.09.16 create
////////////////////////////////////////////////////////////////////////////////
TCHAR* CGSMProtocol::StrCat(TCHAR *strDest, const TCHAR *strSour)
{
TCHAR *pReturn=NULL;
#if(M_ISUNICODE==1)
{
pReturn=wcscat(strDest,strSour);
}
#else
{
pReturn=_tcscat(strDest,strSour);
}
#endif
return pReturn;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -