簡訊貓軟體的實現 C 《八》7bitPDU的解碼

2022-04-02 08:03:40 字數 1770 閱讀 6513

先看下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...