yuzhongzhen 发表于 2018-3-29 10:04:01

7E加码解码

转载请注明出处:http://blog.csdn.net/wqx521
view plain copy



[*]//===========================================================================
[*]// 加密单个字符
[*]uint8_t*
[*]hdlc_encode_buf(uint8_t *buf, uint8_t c)
[*]{
[*]switch (c)
[*]{
[*]case 0x7E:
[*]    *buf++ = 0x7D;
[*]    *buf++ = 0x02;
[*]    break;
[*]
[*]case 0x7D:
[*]    *buf++ = 0x7D;
[*]    *buf++ = 0x01;
[*]    break;
[*]
[*]default:
[*]    *buf++ = c;
[*]    break;
[*]}
[*]
[*]return buf;
[*]}
[*]
[*]
[*]//===========================================================================
[*]// 加密字符串
[*]static void
[*]encode_process(uint8_t *encoded_buf, uint8_t *data, uint16_t length)
[*]{
[*]uint16_t i;
[*]
[*]*encoded_buf++ = 0x7E;
[*]while(length--)
[*]{
[*]    hdlc_encode_buf(encoded_buf, *data++);
[*]}
[*]*encoded_buf++ = 0x7E;
[*]}
[*]
[*]static struct pt pt_decode;
[*]static uint8_t buffer = {0};
[*]static count = 0;
[*]
[*]static char
[*]decode_char(uint8_t c)
[*]{
[*]uint8_t ch;
[*]struct pt *pt = &pt_decode;
[*]
[*]PT_BEGIN(pt);
[*]PT_WAIT_UNTIL(pt, c == 0x7E);
[*]
[*]while(1)
[*]{
[*]    PT_YIELD(pt);
[*]
[*]    if(0x7D == c)
[*]    {
[*]      PT_YIELD(pt);
[*]      if(0x01 == c)
[*]      {
[*]      ch = 0x7D;
[*]      }
[*]      else
[*]      {
[*]      ch = 0x7E;
[*]      }
[*]    }
[*]    else
[*]    {
[*]      ch = c;
[*]    }
[*]
[*]    buffer = ch;
[*]}
[*]
[*]PT_END(pt);
[*]}
[*]
[*]static void
[*]decode_process(uint8_t *data, uint16_t length)
[*]{
[*]while(length--)
[*]{
[*]    decode_char(*data);
[*]    ++data;
[*]}
[*]}
----------------------------------华丽的分界线-----------------------------北京万邦易嵌科技有限公司:专业提供单片机、M3/M4、linux、Android、QT技术服务、技术培训。详细咨询请加QQ:715493858


页: [1]
查看完整版本: 7E加码解码