十六进制转二进制后,得到的一个二维数组怎么样存到一个字符串变量中
十六进制转二进制后,得到的一个二维数组怎么样存到一个字符串变量中
程序代码: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.