[英]How do I seek in stdin
大家好,我需要帮助。 我想从stdin
读取16个字节。 我将每个字节转换为十六进制形式。 有没有办法我可以使用read()
函数从头开始读取NOT,但从第二个字节开始读取呢? 还如何知道我是否已阅读整个stdin
? -这样,我可以循环调用此函数,直到我阅读了整个stdin
这是我做的一个功能:
void getHexLine()
{
int n = 16;
char buffer[n];
read(STDIN_FILENO, buffer, n);
buffer[n]='\0';
//printf("%08x", 0); hex number of first byte on line - not working yet
putchar(' ');
putchar(' ');
//converting every byte into hexadecimal
for (int i = 0;i < 16;i++ )
{
printf("%x", buffer[i]);
putchar(' ');
if (i == 7 || i == 15)
putchar(' ');
}
printf("|%s|\n", buffer);
}
输出应该像这样,但是可以选择从第二个字节开始。
[vcurda@localhost proj1]$ echo "Hello, world! This is my program." | ./proj1
48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 20 54 68 |Hello, world! Th|
69 73 20 69 73 20 6d 79 20 70 72 6f 67 72 61 6d |is is my program|
这是一个学校项目,所以我不能使用malloc
, scanf
和<string.h>
。 如果能得到一些帮助,我真的很高兴,对于我不太懂英语的情况感到抱歉。
stdin不可搜索。 您可以读入字节,但不能后退或快进。 EOF(-1)表示标准输入中的stdin输入与常规文件一样结束,但是如果您要与用户进行交互式对话,则这有点松散的概念。
基本上stdin是面向行的,最好使用模式printf()提示,从用户输入整行,如果适用的话输入printf()的结果,以及另一个提示,从用户整行读取,依此类推,至少在开始之前直到您已经习惯了对stdin进行编程。
从第二个字节开始然后变得容易。 读整行,然后从i = 1而不是i = 0开始解析。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.