/*利用sscanf和sprintf实现 ASCII和16进制互转,今天小编就来说说关于分析字符型变量的ascii值的由来 利用sscanf和sprintf实现ASCII和16进制互转?下面更多详细答案一起来看看吧!

分析字符型变量的ascii值的由来 利用sscanf和sprintf实现ASCII和16进制互转

分析字符型变量的ascii值的由来 利用sscanf和sprintf实现ASCII和16进制互转

/*

利用sscanf和sprintf实现 ASCII和16进制互转

"314D63"==>{0x31,0x4d,0x63},

{0x31,0x4d,0x63}==>"314D63"

*/

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include <string.h>

char* AsciiStrTohexStr( unsigned char* din, int din_len, char *dout, int *dout_len )

{

int i;

int c = 0;

int j = 0;

for ( i = 0; i < din_len; i )

{

char tmp[20] = { 0 };

sprintf( tmp, "X", din[i] );

strcat( dout, tmp );

j = 2;

}

dout[j] = '\0';

*dout_len = j;

return(dout);

}

unsigned char* hexStrToAsciiStr( unsigned char* din, int din_len, unsigned char *dout, int *dout_len )

{

int i;

int c = 0;

int j = 0;

for ( i = 0; i < din_len; i = 2 )

{

sscanf( (const char *) din i, "X", &c );

dout[i / 2] = (unsigned char) (c & 0xFF);

j ;

}

*dout_len = j;

return(dout);

}

int main()

{

//利用sscanf ASCII转16进制 "314D63"==>{0x31,0x4d,0x63}

unsigned char din[512] = "314D63";

unsigned char dout[512] = { 0 };

int din_len = strlen( din );

int dout_len = 0;

hexStrToAsciiStr( din, din_len, dout, &dout_len );

printf( "dout1 hex: " );

for ( int i = 0; i < dout_len; i )

{

printf( "x ", dout[i] );

}

printf( ", dout1 str:%s\n", dout );

//利用sprintf实现16进制{0x31,0x4d,0x63}==>"314D63"

unsigned char din2[512] = { 0x31, 0x4D, 0x63 };

unsigned char dout2[512] = { 0 };

int din2_len = 3;

int dout2_len = 0;

AsciiStrTohexStr( din2, din2_len, dout2, &dout2_len );

printf( "dout2 hex: " );

for ( int i = 0; i < dout2_len; i )

{

printf( "x ", dout2[i] );

}

printf( ", dout2 str:%s\n", dout2 );

return(0);

}

/*

dout1 hex: 31 4d 63 , dout1 str:1Mc

dout2 hex: 33 31 34 44 36 33 , dout2 str:314D63

*/

,