?? 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()
{
}
/////////////////////////////////////////////////////////////////////////////////
//功能:在一個字互換低字節(jié)與高直接
//history name date remark
// wanfangjie 2003.03.20 create
//返回值:數(shù)據(jù)長度
/////////////////////////////////////////////////////////////////////////////////
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;
}
//////////////////////////////////////////////////////////////////
//功能:把一個字節(jié)的高四位和低四位變?yōu)閮蓚€字符,該字符為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;
}
//////////////////////////////////////////////////////////////////////////////////
//功能:把兩個字符變成一個字節(jié),該字符的要求為,該字符為0~9或A~F
//history name date remark
// wanfangjie 2003.03.20 create
//返回值:變換后的字節(jié)
//////////////////////////////////////////////////////////////////////////////////
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位的數(shù)變?yōu)樽址?//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;
}
//////////////////////////////////////////////////////////////////////////////////
//功能:把電話號碼轉(zhuǎn)化為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格式電話號碼轉(zhuǎn)化為字符串格式
//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位編碼變?yōu)?位編碼
//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;//余數(shù)
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;
}
////////////////////////////////////////////////////////////////////////////////
//功能:字符串拷貝函數(shù)
//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;
}
////////////////////////////////////////////////////////////////////////////////
//功能:把整性變?yōu)樽址?//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 + -