[英]How can I read in chunks of data from a stream (stdin) for file output? [on hold]
在過去的幾天里,我一直在尋找一種從標准輸入或文件中讀取文本的方法。 我現在需要解決的問題是制作一個從標准輸入讀取多行“不同”文本的程序。 我想緩沖塊中的文本,將其轉換為十六進制代碼的字符串表示形式,以便它匹配一組測試。 測試需要一個包含表示十六進制代碼的普通字符的字符串,但我認為我可以在仍然通過測試的同時將字符寫入標准輸出(?)。
稍后將升級相同的程序以能夠對文件執行相同的操作,並將其寫入另一個.txt 文件。
我已經閱讀了很多文檔,例如 fgets()、read(),但問題是我不明白如何正確使用它們。 我發現最難的部分是如何讀取一個塊,然后在用它做“某事”之后繼續從同一個 memory 地址讀取。
我希望有人能解釋如何正確地制作這個程序,或者指出我正確的方向。
代理正在讀取和寫入 stdio
std::string input = "Every ";
Proxy proxy(input);
letterToHex(); //The program I'm making
output = proxy.output();
我想通過的測試:
std::string expect = "45 76 65 72 79 20"
在此先感謝,我真的盡了最大努力,這樣我就不必問別人了,但我覺得這個特殊的問題真的很困難。
您在手冊頁上看到的簽名是:
char *fgets(char *s, int size, FILE *stream);
由此,我們了解到它從 stream 讀取size
字節,並將結果存儲在 char *s 中。 因此,要從標准輸入(或 FILE 指針)中讀取一大塊(例如 8 個字符)到字符串中,您可以使用以下內容:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char hexbytes[9];
char *endptr;
fgets(hexbytes, 9, stdin);
long converted_hexbytes = strtol(hexbytes, &endptr, 10);
printf("%#lx\n", converted_hexbytes);
}
output 中的結果:
$ ./example
12344321
0xbc5c01
在此示例中,我們有一個包含 9 個字節的數組(請記住為 null 終止符留一個位置)。 我們使用fgets
從stdin
填充它。 然后,我們使用strtol
( stdlib.h
) 將其存儲到 convert_hexbytes 中。 然后,我們使用printf
的格式說明符%#lx\n
打印一個長的十六進制,以 0x 開頭(由“#”指定)。 您可以使用fprintf
代替 printf 寫入文件 stream; fprintf(fp, "%#lx\n", converted_hexbytes);
,這假設您有一個FILE *fp
文件指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.