日期:2014-05-19  浏览次数:20908 次

关于移动CMPP协议的理解
信息标识,生成算法如下:
采用64位(8字节)的整数:
(1) 时间(格式为MMDDHHMMSS,即月日时分秒):bit64~bit39,其中
bit64~bit61:月份的二进制表示;
bit60~bit56:日的二进制表示;
bit55~bit51:小时的二进制表示;
bit50~bit45:分的二进制表示;
bit44~bit39:秒的二进制表示;
(2) 短信网关代码:bit38~bit17,把短信网关的代码转换为整数填写到该字段中。
(3) 序列号:bit16~bit1,顺序增加,步长为1,循环使用。
各部分如不能填满,左补零,右对齐。

---------------------

以上是CMPP协议的定义,据我了解一个byte由8位2进制数据来表示,但是象协议中的 "短信网关代码:bit38~bit17 ",总共长度为22位,这不是跨byte了?或者是长度不够吗?如果网关代码为1的话,如何去赋值呢?请教各位大哥了

------解决方案--------------------
你说的msgid字段一般在sp端解析 3序列号字段就可以了
如果你要全部解析,你可以根据协议的说明把对应的字段内容分离出来,转换即可
你说的跨byte是不存在的,短信网关代码 只是整形转成byte队列后封装成22位的byte而已,只是为了符合包体的规范而做的修改