`
a137268431
  • 浏览: 145571 次
文章分类
社区版块
存档分类
最新评论

Hex编码与解码

 
阅读更多

一、Hex编码简介

Hex 全称 是Intel HEX。Hex文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。

那么Hex编码是什么呢?就是将数据转化成符合Intel HEX文件中的数据格式的编码方式。举一个简单的例子,如下:

99、105、224,7

编码之后的数据为:“6369e007”,是一个字符串。

二、Hex编码与解码实现

  1. staticconstcharhex_table_uc[16]={'0','1','2','3',
  2. '4','5','6','7',
  3. '8','9','A','B',
  4. 'C','D','E','F'};
  5. staticconstcharhex_table_lc[16]={'0','1','2','3',
  6. '4','5','6','7',
  7. '8','9','a','b',
  8. 'c','d','e','f'};
  9. char*encodeToHex(char*buff,constuint8_t*src,intlen,inttype){
  10. inti;
  11. constchar*hex_table=type?hex_table_lc:hex_table_uc;
  12. for(i=0;i<len;i++){
  13. buff[i*2]=hex_table[src[i]>>4];
  14. buff[i*2+1]=hex_table[src[i]&0xF];
  15. }
  16. buff[2*len]='\0';
  17. returnbuff;
  18. }
  19. uint8_t*decodeFromHex(uint8_t*data,constchar*src,intlen){
  20. size_toutLen=len/2;
  21. uint8_t*out=data;
  22. uint8_taccum=0;
  23. for(size_ti=0;i<len;++i){
  24. charc=src[i];
  25. unsignedvalue;
  26. if(c>='0'&&c<='9'){
  27. value=c-'0';
  28. }elseif(c>='a'&&c<='f'){
  29. value=c-'a'+10;
  30. }elseif(c>='A'&&c<='F'){
  31. value=c-'A'+10;
  32. }else{
  33. returnNULL;
  34. }
  35. accum=(accum<<4)|value;
  36. if(i&1){
  37. *out++=accum;
  38. accum=0;
  39. }
  40. }
  41. returndata;
  42. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics