首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >莱克斯:将十六进制转换为12月

莱克斯:将十六进制转换为12月
EN

Stack Overflow用户
提问于 2022-05-22 09:17:01
回答 1查看 116关注 0票数 1

我试图用flex和bison构建一个简单的词法分析,但在我的lex.l中将十六进制转换为dec有问题。这是我的密码。

十六进制(0)(x-9)+{十六进制}{count++;printf(“%d\t(十六进制,%s)\n",计数,yytext);}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-24 17:00:56

哦哦!我解决了问题!我只需要添加两个函数,比如c程序,并改变输出的类型。

代码语言:javascript
复制
{hex} {count++;printf("%d\t(hex,%d)\n",count,hextodec(yytext));}
{oct} {count++;printf("%d\t(oct,%d)\n",count,octtodec(atoi(yytext)));}



int octtodec(int oct){
 int dec=0,pos=0;
 while (oct){
     int a=oct%10;
     dec += a * pow(8,pos);
     pos++;
     oct /= 10;
 }
 return dec;}

 int hextodec(char *hex){
 int dec=0,pos=0;
 int len;
 len=strlen(hex);
 for (int i =2;i<len;i++){
     if(hex[i]>='a'&&hex[i]<='f'){
         dec=dec+(hex[i]-'a'+10)*pow(16,len-i-1);
     }
     else if(hex[i]>='A'&&hex[i]<='F'){
         dec=dec+(hex[i]-'A'+10)*pow(16,len-i-1);
     }
     else{
         dec+=(hex[i]-'0')*pow(16,len-i-1);
     }
 }
 return dec;}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72336219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档