我正在接收来自GSM调制解调器的PDU格式的短信; TP-User-Data为“C8329BFD06DDDF72363904”
我得到的是:“ 2 r69”,而发送的短信是“Hello World!”。
这是我的java代码:
private String fromPDUText(String PDUSMSText) {
String endoding = PDUSMSText.substring(0, 2);
PDUSMSText = PDUSMSText.substring(18);
byte bs[] = new byte[PDUSMSText.length() / 2];
for(int i = 0; i < PDUSMSText.length(); i += 2) {
bs[i / 2] = (byte) Integer.parseInt(PDUSMSText.substring(i, i + 2), 16);
}
try {
String out = new String(bs, "ASCII");
} catch(UnsupportedEncodingException e) {
e.printStackTrace();
return "";
} finally {
return out;
}
}
答案 0 :(得分:1)
输入以每个字符7位打包,这意味着每8个字节编码9个字符。构建这种格式的解析器可能是一种有趣的练习或令人沮丧的体验,具体取决于您如何使用它。您最好使用图书馆,快速Google搜索会显示several code examples。
答案 1 :(得分:1)
这就是7Bit字符的包装方式:
Encoding-Decoding-7-bit-User-Data-for-SMS-PDU-PDU
答案 2 :(得分:0)
我个人认为通过将其视为一个管道来解决这类问题是最容易的,在这个管道中你一端输入8位而另一端检索7位。只要管道中至少有7位,就可以从中读取。当少于7位时,您需要添加更多位,以便为其写入8个新位。所以你需要的是:
伪代码中的算法如下:
pipe = 0;
bitCount = 0;
while(hasMoreData())
{
pipe |= readByte() << bitCount;
bitCount += 8;
while(bitCount >= 7)
{
writeByte(pipe & 0x7F);
pipe >>= 7;
bitCount -= 7;
}
}