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

转载于:https://www.cnblogs.com/zhouhaibo-xm/archive/2013/04/14/3020655.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值