牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2006-12-11 投稿人: 浏览次数:3017
    引言:      我们在程序的调试中,经常需要把一段字节序列(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 4C4C4F"

                   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;

 

}

 
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。