为7位串联SMS创建UDH

时间:2014-12-10 06:02:45

标签: java string header sms concatenation

我需要发送连接的短信,我把它分成小部分消息(超过160个字节)现在我想在每个部分放一个标题。标题有6个八位字节如下

字段1(1个八位位组):用户数据标头的长度,在本例中为05。 字段2(1个八位字节):信息元素标识符,等于00(连接的短消息,8位参考号) 字段3(1个八位字节):标题的长度,不包括前两个字段;等于03 字段4(1个八位字节):00-FF,CSMS参考号,对于CSMS中的所有SMS部分必须相同 字段5(1个八位字节):00-FF,部分总数。 字段6(1个八位字节):00-FF,该部分的序列号。

实施例: 05 00 03 CC 02 01 [留言] 05 00 03 CC 02 02 [消息]

现在问题是我想将这6个八位字节放在7个septets中,并且需要将SMS消息的大小从160个字符减少到153个字符。如何在7个septets中转换这6个八位字节。是否有任何编码可用< / p>

1 个答案:

答案 0 :(得分:1)

这真的不那么难。

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 1100xxxx

xxxx将全部为1或者全部为0,具体取决于您发送字节的用途,如果是AT命令,那么它将全部为全部0&#39;所以你的7位编码最终会

0A 00 1C C0

你可以看到哪个没有为你节省任何字节。

如果你使用GSM字母表(你通过设置正确的DCS值得到它),7位编码只能可靠地工作,你再次设置它的方式取决于你用来发送短信的用途。

例如,大多数HTTP提供程序都提供某种切换/标志来执行此操作。