簡體   English   中英

如何從 output 文件的 stream (stdin) 讀取數據塊? [等候接聽]

[英]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 終止符留一個位置)。 我們使用fgetsstdin填充它。 然后,我們使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM