gsmdecodepdu.c

来自「GSM短信息PDU解码程序」· C语言 代码 · 共 52 行

C
52
字号
#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 + =
减小字号Ctrl + -
显示快捷键?