我已经写了一个程序来解码CDMA3GPP2点对点短信。我在互联网上找到的几个CDMA PDU十六进制字符串上测试了它,它工作得很好。然而,当我尝试在Android平台上的所有传入文本消息上实现它时,它总是失败。
我看了看传入的PDU,它似乎不遵循我所习惯看到的相同模式。谁能解释一下这个PDU是什么格式,或者我遗漏了什么才能正确解码这个PDU?是否有其他标题或字段未考虑在内?
从我手机上的传入文本消息中提取的示例PDU:
000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000我找到并测试我的解析器的所有CDMA看起来更像是:
00000210020207028CE95DCC65800601FC08150003168D3001061024183060800306101004044847运营商:Verizon Phone:运行Android 2.3.3的Samsung Galaxy S Fascinate
发布于 2012-07-10 03:05:37
请参阅来自$SDK/sources/android-16/com/android/internal/telephony/cdma/SmsMessage:的javadoc
/**
* Creates byte array (pseudo pdu) from SMS object.
* Note: Do not call this method more than once per object!
*/它没有遵循任何特定的...so标准。但是你可以解码它;所以在精美的ASCII艺术中:-
000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000
--------messageType --digitMode --------bearerReply ------------------------------------------------------bearer data
--------teleService --ton --------------------src --replySeqNo --messageID --msts --userdata
--------serviceCategory --errorClass --len --XX--len --len
--numberMode --causeCode ------ ------------2012/06/24 20:56:11
--npi --------bearerDataLength ----------------------userdata
--len 请注意,我认为你在消息中犯了一个剪切/粘贴错误-- 00字节的'XX‘我认为不应该出现在那里--幸运的是,它很容易识别日期并倒过来工作。这是一条来自6789101674的带有用户数据的消息:
104C2CF9F3F5EBD73E7000,其中前5位表示它是7位编码的(0x02)。将用户数据的其余部分向左移动5位后,剩下的结果是:
09859f3e7ebd7ae7ce00
--len(septets) 9 septets == 63 bits, so we expect 8 bytes of body
----------------7bit-body所以你解码的7bit-body是"Bggguuugg“。
https://stackoverflow.com/questions/11182650
复制相似问题