实际上识别十六进制但noto转换十六进制计算器与flex和野牛

时间:2017-10-08 12:29:17

标签: hex calculator bison flex-lexer

我在flex和bison中有一个计算器的问题 在此代码中

0[xX][0-9a-fA-F]+ {yylval=strtol(yytext,0 ,16);return HEX;}

它实际上识别十六进制值,并进行数学运算,但是当我想打印结果时,它会以十进制的形式打印出来。

所以我认为这是一个问题:

/*main(int argc, char **argv)
{
int tok;
while(tok = yylex()) {
printf("%d", tok);
if(tok == NUMBER) printf(" = %d\n", yylval);
else 
if(tok == HEX) 
printf(" = %x\n", yylval);
else
printf("\n");
}
}*/

1 个答案:

答案 0 :(得分:0)

在您使用它的方式中使用

strtol,将ASCII 1 十六进制转换为二进制整数形式。作为intlong,您可以对其执行操作(添加,减去,相乘等),您可以对ASCII(字符串)形式的数字执行操作。要实际显示一个数字,您需要将其转换回ASCII,这是printf所做的。通过%d转换,它会转换为ASCII十进制 - 如果您想要ASCII十六进制,请使用%x

1 严格来说,它可能是任何字符集,不一定是ASCII,但几乎所有C编译器都使用ASCII或其某些扩展名作为基本字符集 < / p>

相关问题