先看下pdu的7bit編碼:
pdu編碼詳見:簡訊貓軟體的實現(c#)《三》pdu格式簡訊解析
英文編碼:7bit編碼,依次將下一位的後幾位移至前面形成新的8位編碼
示例:test
t:01010100 e:01100101 s:01110011 t:01110100
去最高位0,變為7位
t:1010100 e:1100101 s:1110011 t:1110100
後面低位移至前面形成8位編碼
test:11010100111100101001110000001110
ud:d4f29c0e udl:04
解碼演算法:使用迴圈;每次迴圈讀取乙個位組(已存入位元組緩衝區);轉化為二進位制字串,取低位和對應上個位組剩下的二進位制位組成7bit ascii碼,加入結果陣列。
1:private string pdu7bitdecoder(string userdata)
2:
11:
12:int j = 0; //while計數
13:int tmp = 1; //temp中二進位制字元字元個數
14:while (j < userdata.length / 2 - 1)
15:
24:
25: result += (char)convert.toint32(s.substring(tmp) + temp, 2); //加入乙個字元 結果集 temp 上一位組剩餘
26:
27:temp = s.substring(0, tmp); //前一位組多的部分
28:
29:if (tmp > 6) //多餘的部分滿7位,加入乙個字元
30:
35:
36: tmp++;
37: j++;
38:
39:if (j == userdata.length / 2 - 1) //最後乙個字元
40:
43: }
44:return result;
45: }
類庫中的其他改動:
1: datacodingscheme = strpdu.substring(lensca + lenoa + 4, 2); //dcs賦值,區分解碼7bit另外還改動了
1: userdata = strpdu.substring(lensca + lenoa + 22);句。原來有子字串長度,由於7bit編碼和usc2編碼長度計算不太一樣,去掉此引數,直接取到字串尾。
更新部分:解碼函式while迴圈,改成do-while迴圈,解決只收到乙個英文本元時,解碼內容為空的問題 2011-04-11 檔案修改後內容在:
附件:工程專案檔案
簡訊貓軟體的C 實現系列文章
以下來自cs程式設計師之窗,轉過來僅作以後方便查閱 簡訊貓軟體的c 實現 一 熟悉串列埠 簡訊貓軟體的c 實現 二 at指令偵錯程式的簡單實現 簡訊貓軟體的c 實現 三 pdu格式簡訊解析 簡訊貓軟體的c 實現 四 pdu格式編碼c 實現 簡訊貓軟體的c 實現 五 pdu格式解碼c 實現 簡訊貓軟體...
簡訊貓軟體的實現 C 系列部落格索引
簡訊貓系列文章已經完成,這篇文章給出各篇的鏈結和相關的bug列表及最新的文章更新日期。在這裡感謝的支援了,謝謝大家的支援。僅提供串列埠使用例項,也可作為一般的串列埠偵錯程式使用,如遇嚴重bug我會盡快更新。這是我的最簡單的類庫雛形示例,很不完善,錯誤很多,本文不再更新。這篇是我學習pdu的總結,詳細...
八皇后問題的c 實現
八皇后問題的實現 include include using namespace std queenchess類宣告 class queenchess 建構函式,將棋盤初始化 queenchess queenchess 求解八皇后問題,並給出放置成功的棋盤總個數 void queenchess so...