BYTES与十六进制表示的相互转换

   
引言:
     我们在程序的调试中,经常需要把一段 字节序列(BTYES)输出显示,由于,这样的BYTES不是普通的以'/n'结尾的字符串,而我们通常需要查看 BYTES中每个字节的值。所以,我们要将BYTES转换为16进制表示的字符串形式。也就是需要把“字节序列”转换成 16进值表示的字符串
    另外,我们也需要把16进制表示的字符串,转换为对应的 BYTES
    下面给出的两个函数,分别实现了上面的两个功能,说实话,这个不好讲述。只有多看几眼代码。
     函数的名称好象不是很直观,有时间的时候,我会对它进行改动。
    最好改成:  BytesToHexstr 和 HexstrToBytes,  对HexstrToBytes最好是返回一个 bytes的长度
 

/*----------------------------------------

函数名称:int StrToHex(const char *str, char *hex, UINT nLength)

        能:将字符串(不一定是以'/0'结尾的)转化为十六进制表示的字符串,如:"HELLO"-->"48 45 4C 4C 4F "

                   nLength可以指定为字符串的实际长度           

参数说明:str--------需要转换的字符串

                   hex -------转换后的字符串

                  nLength----需要转换的字符串的长度(对不以'/0'结束的无符号数组,需要指明长度)

值:零,成功

人:yaodebo

       间: 2006-10-21

----------------------------------------*/

int StrToHex(const char *str, char *hex , UINT nLength)

{

     int i;

 

     for (i=0;i<(int)nLength;i++)

     {

         sprintf(hex+i*3,"%02X ",str[i]&0xFF); //将字符转化为相应的十六进制表示

     }

     return 0;

}

 

/*----------------------------------------

函数名称:int   HexToStr(const char *hex, char *str)

        能:将十六进制字符串转换字符串形式

                   如将"F0 14 00 15 AF AF AF 0F  " 这个有24个字符的字符串转换为8个字节表示的字节串

参数说明:hex----十六进制字符串

                   str----转换后的字符串(根据实际需要,转换时00不截断)

值:0-------转换成功

                  -1-------转换失败

人:yaodebo

       间: 2006-10-21

----------------------------------------*/

int  HexToStr(const char *hex, char *str)

{

     int i,hlen,iData,iFlag;

     char ch;

 

     iData=0;

     iFlag=0;

     hlen=(int)strlen(hex);

 

     for (i=0;i<hlen;i++)

     {

         if (' '==hex[i])

         {

              continue;

         }//end if

 

         ch=hex[i];

 

         if ((ch>='0') && (ch<='9'))

         {

              ch-=0x30;

         }

         else if ((ch>='a') && (ch<='f'))

         {

              ch-=0x57;

         }

         else if ((ch>='A') && (ch<='F'))

         {

              ch-=0x37;

         }

         else

          {

              *str='/0';

             return -1;

         }//end if

 

         if (0==iFlag)

         {

              iData=ch;

              iFlag=1;

         }

         else

         {

              iData=(iData<<4) +ch;

              iFlag=0;

              *str++=iData;

         }//enf if

     }//enf for

 

     *str='/0';

     return 0;

 

}

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值