我在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");
}
}*/
答案 0 :(得分:0)
strtol
,将ASCII 1 十六进制转换为二进制整数形式。作为int
或long
,您可以对其执行操作(添加,减去,相乘等),您可以对ASCII(字符串)形式的数字执行操作。要实际显示一个数字,您需要将其转换回ASCII,这是printf
所做的。通过%d
转换,它会转换为ASCII十进制 - 如果您想要ASCII十六进制,请使用%x
1 严格来说,它可能是任何字符集,不一定是ASCII,但几乎所有C编译器都使用ASCII或其某些扩展名作为基本字符集 < / p>