| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1877 人关注过本帖
标题:十六进制转二进制后,得到的一个二维数组怎么样存到一个字符串变量中
只看楼主 加入收藏
hbqjlzn
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-8-28
结帖率:0
收藏
已结贴  问题点数:10 回复次数:3 
十六进制转二进制后,得到的一个二维数组怎么样存到一个字符串变量中
十六进制转二进制后,得到的一个二维数组怎么样存到一个字符串变量中
搜索更多相关主题的帖子: 二进制 变量 十六进制 字符 
2010-08-28 12:27
hbqjlzn
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-8-28
收藏
得分:0 
用C语言 谢谢
2010-08-28 13:25
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:5 
int k = 0;
char str[50];

for(i = 0; i < n; i++)   
    for(j = 0; j < m; j++)
    {
        a[i][j] += '0',
        str[k++] = a[i][j];
    }
2010-08-28 22:29
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:5 
十六进制字符转二进制字符直接转换就行了

下面我给个用查表法实现的函数(这个函数非常不好,只是用来体现这种方案的原理):( 低位存在低地址是必要的前提,否则要改代码 )
程序代码:
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.



[ 本帖最后由 Windy0Winll 于 2010-8-29 04:20 编辑 ]

悄悄地来。。。 然后悄悄地走。。。。。。
2010-08-29 03:28
快速回复:十六进制转二进制后,得到的一个二维数组怎么样存到一个字符串变量中
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022996 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved