繁体   English   中英

atof.c 是如何工作的? 从 ASCII 数字中减去 ASCII 零会使其成为 int? 我错过了什么吗?

[英]How does atof.c work? Subtracting an ASCII zero from an ASCII digit makes it an int? Am I missing something?

因此,作为我的 C 课程的一部分,对于我们的第一个作业,我们应该实现自己的 atof.c function,然后将其用于某些任务。 因此,作为一个聪明的全职学生,我决定查看 atof.c 源代码并对其进行调整以满足我的需求。 我想我已经参与了这个 function 所做的大部分操作,比如计算小数点前后的数字,但是有一行代码我不明白。 我假设这是实际将 ASCII 数字转换为 int 类型数字的行。 在这里发布:

frac1 = 10*frac1 + (c - '0');

在源代码中,c 是他们正在处理的数字,而 frac1 是一个 int,用于存储来自传入 ASCII 字符串的一些数字。 但为什么 c- '0' 工作? 作为后续,是否有另一种方法可以达到相同的结果?

'0' 的 ASCII 值是代码页 437(IBM 默认字符集)中的第 48 个字符。 类似地,“1”是第 49 个等等。就自我记录而言,减去“0”而不是诸如 48 之类的幻数要清楚得多。

C 中没有“文本”之类的东西。 只是碰巧将 integer 值视为文本信息的 API。 char是一个 integer 类型,你可以用它做数学运算。 字符文字实际上是 C 中的int (在 C++ 中它们是char ,但即使在那里它们仍然可以用作数值)。

'0'是人类写“零字符序数值”的好方法; 在 ASCII 中,这是数字 48。由于在我知道的所有编码中,数字按从09的顺序出现,因此您可以通过减去'0'将编码中的序数值(例如 ASCII)转换为实际数值'0'以获取从09的实际int值。

您可以直接减去48 (编译时,无法分辨您使用的是哪个选项; 48和 ASCII '0'无法区分),对于阅读您源代码的其他人来说,您所做的事情就不那么明显了.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM