十六进制转二进制后,得到的一个二维数组怎么样存到一个字符串变量中
十六进制转二进制后,得到的一个二维数组怎么样存到一个字符串变量中int HexToBinary( char *binary , const char * hex ) { /**** 16进制字符串hex转成2进制字符串,保存在binary中 ****/ static const table[ 128 ] = { /*/ * 下面的 31是'1'的acsii码值的16进制数, * 下面的 30是'0'的acsii码值的16进制数, * 下面的 20是' '的acsii码值的16进制数, * 下面的 2d是'-'的acsii码值的16进制数, /*/ 0,['0']=0x30303030/*0*/, 0x31303030/*1*/,0x30313030/*2*/,0x31313030/*3*/, 0x30303130/*4*/,0x31303130/*5*/,0x30313130/*6*/, 0x31313130/*7*/,0x30303031/*8*/,0x31303031/*9*/, 0,['A']=0x30313031/*A*/,0x31313031/*B*/,0x30303131/*C*/, 0x31303131/*D*/,0x30313131/*E*/,0x31313131/*F*/, 0,['a']=0x30313031/*a*/,0x31313031/*b*/,0x30303131/*c*/, 0x31303131/*d*/,0x30313131/*e*/,0x31313131/*f*/, 0, } ; const int sign = 0x2d202020; // 对应 字符串" -” ,负号 int *walk = ( int * ) binary ; char *pchar ; if ( !binary || !hex ) return 0 ;//失败 for ( --hex ; *++hex == ' ' ; ) ;// 跳过 空格 if ( *hex=='-' ) // 负号 { ++hex ; *walk++ = sign ; } else if ( *hex=='+' ) ++hex ; // 正号 if ( *hex=='0' && (hex[1]=='x' || hex[1]=='X') ) hex += 2 ; // 跳过前导的 0x 或 0X for ( --hex ; *++hex == '0' ; ) ; // 跳过 0 --walk ; --hex ; while( *++walk = table[ * ++ hex ] ) ;//把16进制字符转换成相应的2进制字符 if ( *hex != 0 ) //非16进制字符,失败 { *binary = 0 ; return 0 ; } pchar = ( char * ) walk ; pchar = 0 ; return 1 ; //成功 }对于上面table的说明:如'B'转成2进制应该是1011,相对应的字符数组是{0x31/*最高位*/,0x30,0x31,0x31/*最低位*/} 。把这样一个字符数组映射到一个32位int数本来应该是0x31303131的,但是,我们在读取字符串时是从低地址开始,这样低地址需要保存高位的数据,或者可以理解:我们需要把原来的高低位顺序反过来。于是这个int数就变成了0x31313031. 又入'1'对应的int数本来应该是0x30303031,但实际是0x31303030.