資源簡介
從網絡上知名代碼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?)
{
- 上一篇:火車票售票系統 c語言
- 下一篇:Kruskal算法的c語言實現
評論
共有 條評論