簡體   English   中英

讀寫未簽名的char緩沖區到C中的文件?

[英]Read and write a buffer of unsigned char to a file in C?

以下代碼將無符號字符數組(定義為byte )寫入文件:

typedef unsigned char byte;
void ToFile(byte *buffer, size_t len)
{
    FILE *f = fopen("out.txt", "w");
    if (f == NULL)
    {
        fprintf(stderr, "Error opening file!\n");
        exit(EXIT_FAILURE);
    }
    for (int i = 0; i < len; i++)
    {
        fprintf(f, "%u", buffer[i]);
    }
    fclose(f);
}

如何將文件從out.txt讀回byte緩沖區? 我們的目標是循環緩沖區bytebyte 謝謝。

如何將文件從out.txt讀回字節緩沖區? 目標是逐字節迭代緩沖區。 謝謝。

與此類似的東西應該對您有用。 (未調試,請遠離我的編譯器執行此操作)

void FromFile(byte *buffer, size_t len)
{

    FILE *fOut = fopen("out.txt", "rb");  
    int cOut;

    int i = 0;
    if (fOut == NULL)
    {
        fprintf(stderr, "Error opening file!\n");
        exit(EXIT_FAILURE);
    }
    cOut = fgetc(fOut);
    while(cOut != EOF)
    {
        buffer[i++] = cOut;  //iterate buffer byte by byte

        cOut = fgetc(fOut);   
    }

    fclose(fOut);
}

如果您想讀回去,我不會用%u來寫出來。 %u將是可變寬度輸出,因此1 %u一個字符, 12 %u兩個字符,依此類推。當您讀回它並看到112您不知道這是否是三個字符(1、2、1),或兩個(11,2;或1,12)或僅一個(112)。 如果需要ASCII文件,則可以使用固定寬度的輸出,例如%03u。 這樣,每個字節始終為3個字符。 然后,您可以使用fscanf("%03u", buffer[i])一次讀取一個字節。

您可以(並且應該)使用fread()fwrite()http://www.cplusplus.com/reference/cstdio/fread/ )在FILE和內存之間傳輸原始內存。

要確定文件的大小(建議fread()應該讀取多少字節),請使用fseek(f, 0, SEEK_END)http://www.cplusplus.com/reference/cstdio/fseek/ )來放置文件將光標移到文件末尾,並使用ftell(f)http://www.cplusplus.com/reference/cstdio/ftell/ )讀取其大小。 不要忘記從fseek(f, 0, SEEK_SET)開始重新開始實際的閱讀過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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