7bit ASCII编解码

  在使用手机模块实现pdu短信收发功能的时候居然要使用7bit ASCII编解码而不是7bit GSM编解码,有点无语。好吧,那九用7bit ASCII编解码吧,比较懒,直接上网搜索,结果baidu、google搜索到的都是7bit GSM编解码,无语了,只能自己写了。。。

  7bit ASCII这里就不详细说了,直接贴代码。。。

  encode代码如下

 1 char szSrc[256] = "hellohello";
 2 int iSrcLen = strlen(szSrc);
 3 unsigned char ucDes[256] = {0};
 4 int iDesLen = iSrcLen - iSrcLen/8;
 5 
 6 int i = 0;
 7 int pos = 0;
 8 int left = 7;
 9 int right = 8 - left;
10 for(i=0;i<iDesLen;i++)
11 {
12     ucDes[i] = szSrc[pos] << (8 - left);
13     pos ++;
14     ucDes[i] = ucDes[i] ^ (szSrc[pos] >> (8 - right - 1));
15 
16     if(7 == right)
17         pos ++;
18     left = 7 - right;
19     if(0 == left)
20         left = 7;
21     right = 8 - left;
22     printf("%02x",ucDes[i]);
23 }
24 printf("\n");    

输出为:d19766cdfa32ecd9bc

  decode代码如下

 1 unsigned char szSrc[256] = {0};
 2 szSrc[0] = 0xd1;
 3 szSrc[1] = 0x97;
 4 szSrc[2] = 0x66;
 5 szSrc[3] = 0xcd;
 6 szSrc[4] = 0xfa;
 7 szSrc[5] = 0x32;
 8 szSrc[6] = 0xec;
 9 szSrc[7] = 0xd9;
10 szSrc[8] = 0xbc;    
11 int iSrcLen = 9;
12 
13 char szDes[256] = {0};
14 int i = 0;
15 int pos = 0;
16 int left = 7;
17 int right = 8 - left;
18 for(i=0;i<iSrcLen;i++)
19 {
20     szDes[pos] = szDes[pos] ^ (szSrc[i] >> (8 - left)) ;
21     pos ++;
22     unsigned char uTmp = szSrc[i] << (8 - right);
23     szDes[pos] = uTmp >> 1;
24 
25     if(7 == right)
26         pos ++;
27     left = 7 - right;
28     if(0 == left)
29         left = 7;
30     right = 8 - left;
31 }        
32 printf("%s",szDes);

输出为:hellohello
posted @ 2013-04-14 17:55  openflight  阅读(4084)  评论(0)    收藏  举报