在 C 中读取和写入 unsigned char 的缓冲区到文件?

Posted

技术标签:

【中文标题】在 C 中读取和写入 unsigned char 的缓冲区到文件?【英文标题】:Read and write a buffer of unsigned char to a file in C? 【发布时间】:2014-06-26 12:17:14 【问题描述】:

以下代码将一个无符号字符数组(定义为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 的缓冲区?目标是通过byte 迭代缓冲区byte。谢谢。

【问题讨论】:

如果你想读回来,我不会用%u写出来。 %u 将是可变宽度输出,所以 1 需要一个字符,12 需要两个字符,依此类推。当你读回来看到 112 你不知道那是不是三个字符( 1, 1, 2) 或两个 (11, 2; 或 1, 12) 或仅一个 (112)。如果您需要 ASCII 文件,您将使用固定宽度的输出,例如 %03u。这样每个字节总是 3 个字符。然后您可以使用fscanf("%03u", buffer[i]) 一次读取一个字节。 嘿@lurker 谢谢!我怎样才能接受这个作为答案?您的帖子帮助我了解了我需要做什么。 谢谢。我将其发布为答案,这是我最初应该做的。 【参考方案1】:

如果你想读回来,我不会用%u 写出来。 %u 将是可变宽度输出,因此 1 需要一个字符,12 需要两个字符,依此类推。当你读回来看到 112 你不知道那是不是三个字符(1, 1, 2) 或两个 (11, 2; 或 1, 12) 或仅一个 (112)。如果您需要 ASCII 文件,您将使用固定宽度的输出,例如 %03u。这样每个字节总是 3 个字符。然后您可以使用fscanf("%03u", buffer[i]) 一次读取一个字节。

【讨论】:

【参考方案2】:

如何将文件从 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);

【讨论】:

【参考方案3】:

您可以(并且应该)使用fread()fwrite() (http://www.cplusplus.com/reference/cstdio/fread/) 在FILE s 和内存之间传输原始内存。

要确定文件的大小(建议 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) 跳回到开头以了解实际阅读过程。

【讨论】:

感谢您的回答。不幸的是,实现必须在 C 中。 所有提到的函数都是标准 C 库 (/the stdio.h) 的一部分。它们只是记录在 cplusplus.com 网站上。包含 stdio.h,您可以在任何 C 程序中使用它们。

以上是关于在 C 中读取和写入 unsigned char 的缓冲区到文件?的主要内容,如果未能解决你的问题,请参考以下文章

在C语言中,unsigned char是啥类型

在C语言中,unsigned char是啥类型

在C语言中,unsigned char是啥类型

unsigned char 和 signed char

在C语言中,unsigned char是啥类型

在C语言中,unsigned char是啥类型?