二进制与16进制直接相互转换

二进制字符串转16进制值

 /**
 * @brief		二进制文本转16进制.
 * @details	    这个函数实现输入2进制文本,转换输出16进制值
 * @param[in]	dat_in  输入的2进制文本数据
 * @param       dat_in 一次最多处理8位
 * @retval		转换后的16进制数据
 * @par 标识符
 * 		保留
 * @par 其它
 * 		无
 * @author 作者最美好的在初见
 */

unsigned char binary_to_hex_value(void * dat_in){ //binary to hex data 
	unsigned char    *pdata;
	unsigned char binary_size = 0;
	unsigned char i=0, hex = 0;
	pdata = dat_in;
	binary_size = strlen(dat_in);
	if(binary_size>8)binary_size = 8;
	for( i=0; i< binary_size;i++ ){
	   if(pdata[i]== '1'){
	    hex = (hex *2) +1;
	   }else if(pdata[i]== '0'){
	    hex = (hex *2) ;
	   }
	}
	return  hex ;
}

二进制文本数组转16进制数组

 /**
 * @brief		二进制文本转16进制数组.
 * @details	    这个函数实现输入2进制文本,转换输出16进制数组
 * @param[in]	binary_in  输入的2进制文本数据
 * @param[in]	head 进行转换的起始位置
 * @param[in]	tail 进行转换的结束位置
 * @param[out]	hex_out 输出转换完成的16进制数组
 * @param       注意当输入tail 超过二进制数据长度时,会自动去除超出部分,再进行转换
 * @retval		转换后的16进制数据
 * @par 标识符
 * 		保留
 * @par 其它
 * 		无
 * @author 作者最美好的在初见
 */
int binary_to_hexValue(void * hex_out,void * binary_in, unsigned short head, unsigned short tail){
	unsigned char    *pdataIn;
	unsigned char    *pdataOut;
	unsigned char    *pdata;
	unsigned char binary_size = 0;
	unsigned char index = 0;
	pdataIn = binary_in;
	binary_size = strlen(binary_in);
	if(binary_size>tail) tail = binary_size; //不允许超限
	pdata = pdataIn + head;
	if((tail - head)%8==0){
	index = (tail - head)/8;
	}else {
	index = ((tail - head)/8)+1 ;
	}
	while(index--){
	binary_to_hex_value(pdata);
	}
	return 0;
}

16进制转16进制字符


 /**
 * @brief		16进制数转16进制字符
 * @details	    函数事输入16单字节16进制输出16进制字符
 * @param[in]	hex 需要转换的数据
 * @param[out]	out 转换结果输出
 * @param       
 * @retval		
 * @par 标识符
 * 		保留
 * @par 其它
 * 		无
 * @author 作者最美好的在初见
 */
int hex_to_hexChar(unsigned char hex,void * out){
   
	unsigned char dat_H = 0;
	unsigned char dat_L = 0;
	unsigned char *pdata =out ;
	
	dat_H = hex/16;
	dat_L = hex%16;
	pdata = out;
	
	//printf("HEX H= %02x --L= %02x\r\n",dat_H ,dat_L);
	
	if(dat_H>=0x0A){
	  pdata[0] = (dat_H-10) +'A';
	}else {
	  pdata[0] = dat_H +'0';
	}
	if(dat_L>=10){
	  pdata[1] = (dat_L-10) +'A';
	}else {
	  pdata[1] = dat_L +'0';
	}
	return 0;
}

16进制数组转16进制字符串


 /**
 * @brief		16进制数组数转16进制字符串
 * @details	    16进制数组转换成16进制字符串
 * @param[in]	hex_buff 需要转换的字符串
 *              len 需要转换的长度
 * @param[out]	hex_out_str 转换结果输出
 * @param       
 * @retval		
 * @par 标识符
 * 		保留
 * @par 其它
 * 		无
 * @author 作者最美好的在初见
 */

int hex_to_hexstring(void * hex_out_str,void * hex_buff, unsigned short len){
	unsigned short i=0;
	unsigned char buff[3]="\0";
		unsigned char    *pdataIn;
	unsigned char    *pdataOut;
	pdataIn = hex_buff;
	pdataOut = hex_out_str;
	for( i=0; i< len;i++ ){
		buff[2]= '\0';
		hex_to_hexChar(pdataIn[i],buff);
		pdataOut[2*i] = buff[0];
		pdataOut[2*i+1] = buff[1];
		pdataOut[2*i+2] ='\0';
	}
	return 0;
}

16进制字符串转2进制字符串

 /**
 * @brief		16进制字符串转二进制字符串
 * @details	    
 * @param[in]	hexstr  需要转换的字符串
 * @param[out]	binary_out 转换结果输出
 * @param       
 * @retval		
 * @par 标识符
 * 		保留
 * @par 其它
 * 		无
 * @author 作者最美好的在初见
 */

int hex_to_ninary(void *hexstr ,void*binary_out){
	unsigned short i = 0,j =0;
	unsigned char    hex_char = 0;
	unsigned char    hex_value = 0;
	unsigned short   len = 0;
	unsigned char    *P_in;
	unsigned char    *P_out;
	P_in = hexstr;
	P_out = binary_out;
	
	len = strlen((unsigned char*)hexstr);
  for(i = 0;i<len;i++){
         hex_char = (unsigned char)P_in[i];
		 if(hex_char == ' '||hex_char == '\r'||hex_char == '\n'){
			continue;
		  }
		  if(hex_char>= '0' &&hex_char<= '9'){
            hex_value =  hex_char -'0';
		  }else if(hex_char>= 'A' &&hex_char<= 'F'){
             hex_value =  hex_char -'A'+10;
		  }else if(hex_char>= 'a' &&hex_char<= 'f'){
            hex_value =  hex_char -'a'+10;
		  }else{
              return -1;
		  }
		for(j= 0;j<4;j++){
			if(hex_value&0x08){
			P_out[4*i+j] = '1';
			}else {
			P_out[4*i+j] = '0';
			}
			hex_value = (hex_value *2)&0x0f;
	
			 P_out[4*i+j+1] = '\0';
		}
  }
	return 0;
}

测试demo

int main()
{
   /*  Write C code in this online editor and run it. */
	char buff_in[] = "1111000011110000101010100011110000111111111111111";
	char buff_out[50] = "";
	char hexbuff[50] = {0X33,0X44,0X55,0X66,0X55,0X66,0X55,0X66,0X55,0X66,0X55,0X88};
	
	int size_date = 0;
	   printf("buff_in  ---》 | %s\n",buff_in);
	hex_to_hexChar(binary_to_hex_value("10101111"),buff_out);
	printf("hex  [%s]\n",buff_out);
   hex_to_hexstring(buff_out,hexbuff,15);
   	printf("hexstring  [%s]\n",buff_out);
   return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值