当前位置:首页 > 编程笔记 > 正文
已解决

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

来自网友在路上 179879提问 提问时间:2023-11-11 15:23:37阅读次数: 79

最佳答案 问答题库798位专家为你答疑解惑

数据转换函数实现

  • 二进制字符串转16进制值
  • 二进制文本数组转16进制数组
  • 16进制转16进制字符
  • 16进制数组转16进制字符串
  • 16进制字符串转2进制字符串
  • 测试demo

二进制字符串转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 char 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;
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"二进制与16进制直接相互转换":http://eshow365.cn/6-37719-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!