二进制字符串转16进制值
unsigned char binary_to_hex_value ( void * dat_in) {
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进制数组
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进制字符
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;
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进制字符串
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进制字符串
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 ( )
{
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 ;
}