我需要发送连接的短消息,我将消息(超过160个字节)拆分成小部分,现在我想在每个part.header中放一个头,有6个八进制,如下所示
字段1 (1八进制):用户数据头的长度,在本例中是05。字段2 (1八进制):信息元素标识符,等于00 (连接短消息,8位参考号)字段3 (1八进制):标题的长度,不包括前两个字段;等于03字段4 (1八进制):00-FF,CSMS参考号,对于CSMS字段5 (1八进制):00-FF中的所有SMS部件,部件总数必须相同。字段6(一个八进制):00-FF,这部分的编号在序列中.
示例: 05 0003 CC 02 01消息05 00 03 CC 02消息
现在的问题是,我想把这6个八进制放在7个characters.How中,它需要将短信的大小从160个减少到153个septets.is,这样就可以将这6个八进制转换成7 septets.is中的任何编码。
发布于 2014-12-11 22:42:47
其实也没那么难。
7位数和8位数之间的差别,因为7位数有它的上层位丢失。
考虑到您直接处理字节,我将假设您在PDU模式下直接这样做,特别是因为您确实知道您的字节布局是什么。
要将8位字节转换为7位,只需去掉上位EG:
如果你有
05 00 03 CC然后在8位内
00000101 00000000 00000011 11001100从技术上讲,要将这些截断为7位,只需从顶部去掉如下所示:
0000101 0000000 0000011 1001100但是,您的上述价值观会有问题,这与您的
CC价值。如果从上面去掉顶部的位,就会有效地将其更改为
4C这可能导致您的SMS系统不正确地解释详细信息。
正是由于这个原因,在几乎所有的情况下,当直接处理二进制文件时,都使用8位发送,这样就可以保留值。
但是,如果您想尝试这个示例,下一步是将7位值连接在一起,如下所示
0000101000000000000111001100然后,您需要将其除以8(传输介质仍然是8位,即使编码不是)。
00001010 00000000 00011100 1100然后将最后的字节移出8位,以便传输为偶数。
00001010 00000000 00011100 1100xxxxxxxx要么是所有的1,要么全部是0,这取决于您使用什么来发送字节,如果它是一个AT命令,那么likley将全部是0,所以您的7位编码最终将是
0A 00 1C C0正如你所看到的,它并没有为你节省任何字节。
只有当您使用GSM字母表(通过设置正确的DCS值获得此值)时,7位编码才能可靠地工作,如何再次设置这一点取决于您首先使用什么发送SMS。
例如,大多数HTTP提供程序都为此提供了某种开关/标志。
https://stackoverflow.com/questions/27394251
复制相似问题