LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1200|回复: 4

请教这函数如何写,错那里了?16进字符,转换?

[复制链接]
发表于 2009-11-6 09:19:55 | 显示全部楼层 |阅读模式
int hexstrtobyte(char *src , char *desc)
{
   int in=0;
   unsigned int vals[20];
   unsigned char wvals[20];
   char *p[20];
   char *buf=src ;
   while((p[in]=strtok(buf,",")) !=NULL)
           {
            sscanf(p[in],"%X",&vals[in]); // from 把16进字符串变成16进数字?  AA - >0xAA
            buf=NULL;
            in++;
           }

    int i=0;

    for (i=0;i<in;i++)
        {
         wvals=vals;
         desc=wvals;
        }
  
   return desc;

}



我要的结果其实是: 有一个 charA="0A 2C 3B .. .. .. " 这种字符串,空格隔开的.

变幻到一个 charB里,而 CharB[0] =0x0A; charB[1]=0x2C charB[2]=0x3B  ....

刚学C 6天,linux4 天,不太会表达,别介意。
 楼主| 发表于 2009-11-6 09:26:40 | 显示全部楼层
这个是通过了的,可是写成函数就不太懂了,上面的函数运行后,
提示:Segmentation fault.(那里超界访问了?)





     unsigned int in=0;  
     unsigned int vals[20];
     unsigned char wvals[20];
     char source[30];
     char *p[20];
     char inputbuf[255]="A0,A1,A2";
     char *buf=inputbuf;

    while((p[in]=strtok(buf,",")) !=NULL)
           {
            sscanf(p[in],"%X",&vals[in]);
            buf=NULL;
             in++;
             //printf("%s",p[in]);
            //if (in>29) break;
            }
    int i=0;
    for (i=0;i<in;i++)
        {
         wvals=vals;
        }
   wvals[in+1]=0;

   if (wvals[0] == 0xA0) printf("0 OK\n");
   if (wvals[1] == 0xA1) printf("1 OK\n");
   if (wvals[2] == 0xA2) printf("2 OK\n");
   if (wvals[3] == 0xbf)    printf("3 OK\n");
回复 支持 反对

使用道具 举报

发表于 2009-11-6 13:54:02 | 显示全部楼层
for (i=0;i<in;i++)
{
wvals=vals;
desc=wvals;
}
desc[i+1] = 0; //不知道这样对不对
回复 支持 反对

使用道具 举报

发表于 2009-11-6 17:19:53 | 显示全部楼层
首先你应该根据空格将charA由字符串变成字符串数组,可以用strtok实现,就是变成这样
char *arraycharA[] = {"0A","2C","3B",...};
然后将字符转换成数值就行了,要注意的是字符的ASIC码值跟它的字面值并不相同,对数字,大写字符小写字符要分别处理一下。然后字符串的第0位乘16再加上第1位就行了。比如
CharB[0]=arraycharA[0][0]*16+ arraycharA[0][1]*;注意这个简单的例子没有处理字符的ASIC值和它的字面值的关系。
回复 支持 反对

使用道具 举报

发表于 2009-11-6 22:33:26 | 显示全部楼层
估计是没分配内存,你试试在调用函数前加上
dest = malloc(100);
然后调用你的函数,
free(dest);
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表