C 将 char 指针转换为 int 或 short 指针

C casting char pointer to int or short pointer

提问人:user3479526 提问时间:6/23/2023 更新时间:6/23/2023 访问量:77

问:

我正在开发一个简单的解释器(Basic 的一个子集。源将作为字符串数组在内存中。我想保持简单,所以不会考虑字节码。执行将首先解析整个程序以检查语法错误,并设置一些数据结构来管理循环和 GOTO 跳转地址,然后启动一个函数从源头逐行处理它。为了加快执行速度,我想将源中的数字文字转换为二进制表示形式。在 C 中做到这一点的正确方法是什么?将 char 指针转换为 int 或短指针是个坏主意吗?我还可以采取哪些其他措施来提高性能?目标是 x86?

C 指针 转换 解释器

评论

2赞 John3136 6/23/2023
选角根本无济于事。您需要将 char 值转换为 int 值 - 使用 atoi 或类似方法。解决此类问题的正常方法是从分词器开始 - 不要将源代码存储为字符串,读取它并将其转换为标记列表。其中一个标记将是类似于“literal_number”的东西
1赞 Aconcagua 6/23/2023
(int)&(p + 1)完全是无稽之谈(对不起),给出了一个暂时的你甚至无法接受的地址......很抱歉需要告诉你:没有办法解析数字文字——尽管幸运的是,有很多函数,例如 (但你可能还需要注意太长的文字!p+1strtoll
1赞 Aconcagua 6/23/2023
不要修改输入字符串(即使它确实有效,处理起来会很痛苦),而是,正如@John3136已经表示的那样,创建一个令牌列表。您可以为每种类型的令牌编写一个包含标识符,并编写一个包含令牌数据的结构。这将完全包括该枚举和包含标记特定数据(如果需要)的联合,例如,对于数字文字,标记其值,对于字符串文字,字符串内容等。enum
1赞 Aconcagua 6/23/2023
@Jabberwocky – 她/他显然不知道或反勾。*(int*)\*
1赞 Aconcagua 6/23/2023
我很确定也不会通过修改输入字符串来做到这一点。但是,如果要以 1:1 的比例恢复原始源代码,则可能需要存储其他信息,例如,对于令牌,您可能需要存储包含整个空格部分(多个空格、制表符、换行符等)的子字符串。BASICWHITE_SPACE

答: 暂无答案