标题:指针数组问题求大神,谢谢大家
取消只看楼主
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
结帖率:28.57%
已结贴  问题点数:20 回复次数:9 
指针数组问题求大神,谢谢大家
static char *tblHex_Bin[16] =
                            {
                                "0000","0001","0010","0011",
                                "0100","0101","0110","0111",
                                "1000","1001","1010","1011",
                                "1100","1101","1110","1111"
                            };

//十六进制表
static const char *tblDec_Hex = "0123456789ABCDEF";

在main函数外定义的静态数组,后面要进行字符串比较然后确定是数组中的那个字符串,我想改成指针不用数组(if (strcmp(tblHex_Bin[j], pTmp) == 0),这是数组的比较),怎么定义个指针变量引用静态数组的首地址?我定义了char *p = tblHex_Bin,不合法,求帮忙。
搜索更多相关主题的帖子: 十六进制 字符串 1100 
2014-05-19 13:13
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 3 楼 top398
我试一下,谢谢哈
2014-05-19 14:09
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 2 楼 embed_xuel
不是一个东西,tblHex_Bin[j]指的是第j个字符串,比如j=0时就是‘0000’,tblHex_Bin这个好像是表示整个数组吧?我也有点晕了
2014-05-19 14:11
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 3 楼 top398
**p指向的是他的地址吧??我想引用内容的话就是*p?
2014-05-19 14:18
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 7 楼 wp231957
输入一个二进制字符,存到pTmp中,然后将这个与tblHex_Bin中的字符串进行比较
2014-05-19 14:22
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 9 楼 wp231957
恩,字符串,都是四位的,长度相等
2014-05-19 14:32
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 9 楼 wp231957
还有我想定义一个指针指向static const char *tblDec_Hex = "0123456789ABCDEF";这个数组的首地址,怎么定义,char **p = tblDec_Hex不对
2014-05-19 14:34
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 12 楼 wp231957
//二进制转十六进制
char *bin2hex(const char *pBinIN, int len, char *pHexOUT)
{
    int i = 0, j = 0, k = 0;
    char *pBin = NULL, *p = NULL, *pTmp = NULL;
    char *p3 = NULL;
    int lenof4 = 0, len_Bin = 0;
   
    //长度为4的倍数
    lenof4 = len % 4;
    if (lenof4 == 0)
    {
        len_Bin = len;
    }
    else
    {
        len_Bin = len + 4 - lenof4;        
    }
   
    //分配内存
    pBin = (char *)malloc(len_Bin + 1);
    pTmp = (char *)malloc(5);
    p3 = pTmp;
    memset(pBin, '0', len_Bin + 1);
    memset(pTmp, '0', 5);
   
    //连接传入的二进制数,补齐为4的倍数
    if (lenof4 == 0)
    {
        *pBin = '\0';
    }
    else
    {
        //最左侧长度<4补0
        pBin[4 - lenof4] = '\0';
    }
    strncat(pBin, pBinIN, len);
   
    printf("补齐的二进制数为:%s\n", pBin);
   
    //查表得到十六进制数
    for (i = 0; i < len_Bin;)
    {
        //得到4个二进制数pTmp
        p = pBin + i;
        strncpy(pTmp, p, 4);
        pTmp += 4;
        *pTmp = '\0';
        pTmp = p3;
        
        //查十六进制-二进制表,得到下标j
        for (j = 0; j < 16; j++, p4++)
        {
            if (strcmp(*p4, pTmp) == 0)
            {
                //根据下标j查十六进制表得一个十六进制数
                pHexOUT[k++] = tblDec_Hex[j];
               
                break;
            }
        }
        
        i = i + 4;
    }
   
    //字符串补上结束标志
    pHexOUT[k] = '\0';
   
    //释放内存
    if (pBin != NULL)
    {
        free(pBin);
        pBin = NULL;
    }
    if (pTmp != NULL)
    {
        free(pTmp);   
        pTmp = NULL;
    }
   
    return pHexOUT;
}

恩恩,还有一个问题麻烦您,这个是我调用的子程序,    //根据下标j查十六进制表得一个十六进制数
                                                    pHexOUT[k++] = tblDec_Hex[j];
这一行,我想把tblDec_Hex[j];用指针替代。不用数组的形式,前面的定义是  static const char *tblDec_Hex = "0123456789ABCDEF";怎么定义一个指针指向他的首地址??
2014-05-19 14:44
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 13 楼 wp231957
  static const char* p=tblDec_Hex;
就指向了tblDec_Hex的首地址对吗??然后**p是tblDec_Hex内的元素对吗?
2014-05-19 14:47
lzrcoming
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2014-4-21
得分:0 
回复 19 楼 top398
嗯啊,特别晕现在,越看越乱,谢谢哈
2014-05-19 16:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-431761-1-1.html




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

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