资源简介

从网络上知名代码gsm修改而来, (http://www.cppblog.com/Lee7/archive/2008/01/15/41186.html) 标准c实现,优化资源消耗,vc6.0验证过,可直接移植到嵌入式系统。

资源截图

代码片段和文件信息

#include “stdio.h“
#include 
#include “string.h“

typedef unsigned char INT8U;
typedef signed char INT8S;
typedef unsigned short int INT16U;
typedef signed short int INT16S;
typedef unsigned int INT32U;
typedef signed int INT32S;

//用户信息编码方式
#define PDU_7BIT 0
#define PDU_8BIT 4
#define PDU_USC2 8

//短消息参数结构,编码解码共用
typedef struct __sm_para__
{
INT8U u8SCA[16]; //短消息服务中心号码
INT8U u8TPA[16]; //目标号码,回复号码
INT8U u8TP_PID; //用户信息协议标识
INT8U u8TP_DCS; //用户信息编码方式
INT8U u8TP_SCTS[16]; //服务时间戳字符串
INT8U u8TP_UD[161]; //原始用户信息,编码前或解码后
}SM_PARA *PSM_PARA;


/*****************************************************************************************
功能:
字符转整数

参数:
u8Data 字符

返回值:
转换后的整数
******************************************************************************************/
INT8U myatoi( INT8U u8Data )
{

if ( u8Data >= ‘0‘ && u8Data <= ‘9‘ )
{
return ( u8Data - ‘0‘ );
}
else if ( u8Data >= ‘A‘ && u8Data <= ‘F‘ )
{
return ( u8Data - ‘A‘ + 10 );
}
else if ( u8Data >= ‘a‘ && u8Data <= ‘f‘ )
{
return ( u8Data - ‘a‘ + 10 );
}
else
{
return 0;
}
}


/***************************************************************************************************************
功能:
可打印字符串转换为字节数据  
如:“C8329BFD0E01“ --> {0xC8 0x32 0x9B 0xFD 0x0E 0x01} 

参数:
pSrc 源字符串指针 
pDst 目标数据指针  
u32SrcLen 源字符串长度 

返回值:
目标数据长度  
****************************************************************************************************************/
INT32U PDU_String2Bytes(INT8U* pSrc INT8U* pDst INT32U u32SrcLen)
{
INT32U u32Ret = 0;
INT32U n;

for ( n=0; n {
//输出高4位
pDst[u32Ret] = myatoi(pSrc[n]) << 4 ;
pDst[u32Ret] |= myatoi(pSrc[n+1]);

n += 2;
u32Ret++;
}

return u32Ret;
}

/***************************************************************************************************************
功能:
两两颠倒的字符串转换为正常顺序的字符串 
如:“683127226152F4“ --> “8613722216254“

参数:
pSrc 源字符串指针 
pDst 目标数据指针  
u32SrcLen 源字符串长度 

返回值:
目标数据长度  
****************************************************************************************************************/
void PDU_SerializeNumbers( INT8U* pSrc INT8U* pDst INT8U u8SrcLen )
{
INT8U n;

for ( n=0; n {
pDst[n]  = pSrc[n+1];
pDst[n+1] = pSrc[n];
}

if ( pDst[n-1] == ‘F‘ )
{
pDst[n-1] = 0;
}
else
{
pDst[n]   = 0;
}
}



/***************************************************************************************************************
功能:
PDU  UCS2解码

参数:
pSrc 源字符串指针 
pDst 目标数据指针  
u32SrcLen 源字符串长度 

返回值:
目标数据长度  
****************************************************************************************************************/
INT8U PDU_UCS2_Decode( INT8U* pSrc INT8U* pDst INT8U u8SrcLen )
{
INT8U n = 0;
INT8U u8DestLen = 0;
INT8U u8High u8Low;

if ( u8SrcLen & 0x03 )
{

评论

共有 条评论