【发布时间】:2021-07-28 10:21:59
【问题描述】:
问题的目的是仅使用 pread 来读取带有整数的文件。
我正在尝试设计一个通用解决方案,我可以在其中读取任何长度的整数,但我认为我当前的算法必须有更好的解决方案。
为了解释和指导算法,这里是一个示例输入文件。我已经明确添加了\r\n 以表明它们存在于文件中。
输入文件:
23456\r\n
134\r\n
1\r\n
345678\r\n
算法
1. Read a byte from the file
2. Check if it is number i.e '0' <= byte <= '9'
3.1 if yes, increment the offset and read the next byte
3.2 if not, is it \r
3.2.1 if yes, read the next and it should be \n.
Here the line is finished and we can use strtol to convert string to int.
3.2.2 // Error condition
我需要制定这个算法,因为如果发现 pread 将文件作为字符串读取,并将请求的字节数放入提供的缓冲区中。
问题: 有没有更好的方法来使用 pread() 从文件中读取整数,而不是解析每个字节以确定字符串的结尾,然后转换为整数?
【问题讨论】:
-
字节不是数字(或者是 0 到 255 之间的数字)。它可以编码一个digit。 2021年UTF-8 is used everywhere。 StackOverflow 不是一个做我的家庭作业的网站。另见this C reference。最后,为了效率,你需要做一些缓冲 IO。请在您的问题中提供一些minimal reproducible example
-
你实际上并没有问过问题。
-
谢谢,我已经更新了描述以包含明确的问题。
-
@BasileStarynkevitch 我不是要求做作业。我只是想看看对于这种情况是否有更好的解决方案或方法。根据我的 cmets,我很清楚我有一个可行的解决方案,但我想改进并寻求集体智慧。
-
这一步:“如果是,增加偏移量并再次读取 val”对我来说听起来很奇怪......你怎么能从另一个偏移量再次读取值?为什么要两次读取相同的值?您已经拥有内存中的值。