【发布时间】:2016-10-15 19:46:27
【问题描述】:
大家好,我需要帮助。我想从stdin 读取 16 个字节。我将每个字节转换为十六进制形式。有没有办法我可以使用read() 函数来读取不是从头开始,而是从第二个字节读取?另外我怎么知道我是否阅读了整个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>。如果我能得到一些帮助,我会非常高兴,并为我不太懂的英语感到抱歉。
【问题讨论】:
-
你不能寻找字符流。其余的:太宽泛了。你应该学过功课。也许查阅您的课程资料会有所帮助。如果没有:有 C 本书可以免费访问。
-
buffer[n]='\0'; -
您必须从
read()捕获返回值,这样您才能知道读取了多少字节,可以是0 (EOF) 到n(又名16)。您必须决定如何处理任何短读。