📄 gsmdecodepdu.c
字号:
#include <my.h>
//PDU解码:用于接收、阅读短信息
//pSrc:源PDU串指针
//pDst:目标PDU参数指针
//返回:用户信息串长度
uint gsmDecodePdu(const uchar *pSrc,SM_PARAM *pDst)
{
uint nDstLength;
uchar tmp;
uchar buf[256];
gsmString2Byte(pSrc,&tmp,2);
tmp=(tmp-1)*2;
pSrc+=4;
gsmSerialzeNumbers(pSrc,pDst->SCA,tmp);
pSrc+=tmp;
gsmString2Bytes(pSrc,&tmp,2);
pSrc+=2;
if(tmp&0x80)
{
gsmString2Bytes(pSrc,&tmp,2);
if(tmp&1) tmp+=1;
pSrc+=4;
gsmSerializeNumbers(pSrc,pDst->TPA,tmp);
pSrc+=tmp;
}
gsmString2Byte(pSrc,(uchar *)&pDst->TP_PID,2);
pSrc+=2;
gsmString2Byte(pSrc,(uchar *)&pDst->TP_DCS,2);
pSrc+=2;
gsmSerializeNumbers(pSrc,pDst->TP_SCTS,14);
pSrc+=14;
gsmString2Bytes(pSrc,&tmp,2);
pSrc+=2;
if(pDst->TP_DCS==GSM_7BIT)
{
nDstLength=gsmString2Bytes(pSrc,buf,tmp&7?(uint)tmp*7/4+2:(uint)tmp*7/4);
gsmDecode7bit(buf,pDst->TP_UD,nDstLength);
nDstLength=tmp;
}
else if(pDst->TP_DCS==GSM_UCS2)
{
nDstLength=gsmString2Bytes(pSrc,buf,tmp*2);
nDstLength-gsmDecodeUcs2(buf,pDst->TP_UD,nDstLength);
}
else
{
nDstLength=gsmString2Byte(pSrc,buf,tmp*2);
nDstLength=gsmDecode8bit(buf,pDst->TP_UD,nDstLength);
}
return nDstLength;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -