⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16-bit unicode pdu编码 .txt

📁 这个是TR800 GPRS模块的有关详细资料。里面有用户手册
💻 TXT
字号:
16-bit Unicode PDU编码  
   关于短信的编码方式,网上有很多相关的资料,就我觉得,深圳的蚕蛹先生有一篇叫《C#开发终端式短信的原理和方法》的文章,对这方面的知识和应用介绍得最为详细,让我受益匪浅。但是他的编码方式,主要适用于中国大陆一些地区。下边我将介绍一种适用于澳门且适合中英文的16-bit Unicode 的PDU编码方式。

    比如我要给我的澳门手机66525472发送内容为“快了,12ab”的一条短消息,它的短信编码为:0011000B915863565274F2000801105FEB4E86FF0C00310032002000610062。

下边我来解释一下编码的过程。

“001100”中的“00”表示自动加入手机的短信中心号码,澳门地区的短信中心号为“+8536800855”。“1100”是PDU编码的固定格式。

“0B”是目标号码的长度,表示为两位的十六进制。我们的目标号码是66525472,加上澳门的区号853,(注意,不计“+”),长度为11,化为二位的十六进制结果就为“0B”。

“915863565274F2”中的“91”表示国际号码格式“+”,“5863565274F2”是目标号码奇偶位交换后的结果,注意在交换之前,先确定号码的长度是否偶数,如果不是,最后要添加F,我们的目标号码长度为11,是奇数,我们需要加F。原号码为85366526452F,变换之后就为5863565274F2。

“000801”中的“00”是固定的,表示GSM普通的点对点的方式,“08”表示为16-bit的编码方式,“01”表示短信暂存在短信服务中心的时间,具体表示多长,我也不记得了,不过时间不算长。

“10”是短信息内容经过编码后的长度/2的结果,也是两位的十六进制数。计算该长度之前,我们需要对发送内容进行16-bit Unicode编码,以下是C#的实现方式。

        public string smsPDUEncoded(string Content)

            {

                Encoding encodingUTF = System.Text.Encoding.BigEndianUnicode;

                string s = null;

                byte [] encodedBytes = encodingUTF.GetBytes(Content);

                for (int i =0;i < encodedBytes.Length;i++)

                {

                    s += BitConverter.ToString(encodedBytes,i,1);

                }

                s = String.Format("{0:X2}{1}",s.Length/2 ,s);

                

                return s;

            }

得到s后我们在计算它的长度就很简单了,不过在具体的编程过程,你的长度计算公式可能需要改为(s-2)/2,因为内容中添加了字符串的结束符“\0”。

“5FEB4E86FF0C00310032002000610062”是发送内容“快了,12ab”的16-bit编码。

经过上边的分析,大家应该对16-bit PDU编码方式有所了解了吧。有兴趣的话,大家可以进入超级终端玩一下,AT指令集网上很多的。这个短信PDU我也是大三暑假弄的,因为要调一个网络摄像头的监控程序。现在也差不多忘了,所以写得有点乱。下次有时间再系统地整理一下,比如在超级终端测试AT指令以及串口通讯的测试什么的。下次吸取教训,千万别太相信自己的记忆力,干了什么事,不管成功与否,一定要好好整理并做好记录。

 

 

《C#开发终端式短信的原理和方法》网址为:

http://www.qqread.com/soft-engineering/p553111102.html

 
 
 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -