GPRS的PDU编码程序
### GPRS的PDU编码程序解析 在深入探讨GPRS的PDU编码程序之前,我们首先需要理解几个关键概念:GPRS(General Packet Radio Service,通用分组无线服务)、PDU(Protocol Data Unit,协议数据单元)以及它们在移动通信中的作用。 #### GPRS与PDU简介 GPRS是第二代移动通信系统GSM(Global System for Mobile communication)的一种扩展,它引入了分组交换技术,允许数据传输和语音通话同时进行,提高了数据传输速率和网络资源的利用率。PDU则是在网络协议栈中不同层之间传输的数据单元,每种协议都有其特定的PDU格式,如IP层的IP数据包、TCP层的TCP段等。在GPRS中,PDU用于封装用户数据,包括短信、互联网访问等,以便在网络中传输。 #### PDU编码程序分析 根据给定的代码片段,我们可以看到三个主要的函数:`gsmString2Bytes`、`gsmBytes2String`和`gsmEncode7bit`,分别负责将十六进制字符串转换为字节数组、将字节数组转换为十六进制字符串,以及进行7比特编码。这些函数是GPRS PDU编码过程中的关键部分。 ##### `gsmString2Bytes` 此函数接收一个十六进制字符串,并将其转换为一个字节数组。这个过程对于处理网络上传输的数据特别重要,因为网络数据通常以字节流的形式存在,而十六进制字符串常用于表示或存储这种字节流。 ##### `gsmBytes2String` 与`gsmString2Bytes`相反,此函数将字节数组转换回十六进制字符串形式,这在数据可视化或存储时非常有用。 ##### `gsmEncode7bit` 7比特编码是GPRS数据传输中的一项关键技术,由于GSM网络采用的是7比特字符集,因此在传输数据前需要进行7比特编码,以适应网络的要求。`gsmEncode7bit`函数实现了这一编码过程,将输入的ASCII字符转换为适合GSM网络传输的7比特格式。 #### 7比特编码详解 7比特编码的主要目标是将标准的8比特ASCII字符压缩到7比特,以提高GSM网络的效率。具体而言: 1. **位移与合并**:输入的每个ASCII字符(8比特)被拆分为两部分,一部分作为当前输出字节的一部分,另一部分可能需要与下一个输入字符的部分合并,形成完整的输出字节。 2. **控制字节与填充**:当输入字符的总数不能被整除时,可能需要添加控制字节或填充位来确保数据的完整性。 3. **效率与兼容性**:虽然7比特编码牺牲了一定的信息量,但它极大地提高了GSM网络的数据传输效率,同时保持了与现有GSM基础设施的兼容性。 #### 结论 GPRS的PDU编码程序是移动通信领域中一个复杂但至关重要的组成部分,它不仅涉及到数据的转换和编码,还涉及到网络资源的有效利用和数据的快速传输。通过深入理解这些编码程序,我们可以更好地把握现代移动通信技术的核心原理,为开发更高效、更可靠的移动通信应用奠定基础。
#include "Sms.h"
#include "Comm.h"
// 可打印字符串转换为字节数据
// 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}
// 输入: pSrc - 源字符串指针
// nSrcLength - 源字符串长度
// 输出: pDst - 目标数据指针
// 返回: 目标数据长度
int gsmString2Bytes(const char* pSrc, unsigned char* pDst, int nSrcLength)
{
for (int i = 0; i < nSrcLength; i += 2)
{
// 输出高4位
if ((*pSrc >= '0') && (*pSrc <= '9'))
{
*pDst = (*pSrc - '0') << 4;
}
else
{
*pDst = (*pSrc - 'A' + 10) << 4;
}
pSrc++;
// 输出低4位
{
*pDst |= *pSrc - '0';
}
else
{
*pDst |= *pSrc - 'A' + 10;
}
pSrc++;
pDst++;
}
// 返回目标数据长度
return (nSrcLength / 2);
}
// 字节数据转换为可打印字符串
// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01"
// 输入: pSrc - 源数据指针
// nSrcLength - 源数据长度
// 输出: pDst - 目标字符串指针
// 返回: 目标字符串长度
int gsmBytes2String(const unsigned char* pSrc, char* pDst, int nSrcLength)
{
const char tab[]="0123456789ABCDEF";// 0x0-0xf的字符查找表
剩余23页未读,继续阅读
- jashimee2013-02-27参考代码,写出我自己的啦,谢谢
- Hero26262013-11-08不适合我用
- 粉丝: 1
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 每周质量安全排查报告.docx
- 排水报装接入申请表.docx
- 评估报告公示公众意见表.doc
- 评审、登记备案情况表.docx
- 墙板隐蔽前监理检查记录.docx
- 抢救室、输液室周带教计划表.docx
- 人防工程主体结构验收前监理人员检查记录表.docx
- 人防工程竣工验收前监理人员检查记录.docx
- 人防门框及临战封堵框常规数据检查表.docx
- 人防门扇常规数据检查表.docx
- 社区工作者岗位表.docx
- 涉及消防的建筑材料、构配件和设备的进场试验报告汇总表.docx
- 涉及消防的各分部分项工程消防查验结果表.docx
- 十级伤残鉴定标准表.docx
- 市标化优良工地检查自评表(施工、监理企业用表).docx
- 输液结束(拔针)流程表.docx