读取和写入无符号字符的缓冲区在C文件?

问题描述 投票:2回答:3

下面的代码将无符号的字符(定义为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.txtbyte的缓冲?我们的目标是通过byte迭代缓冲区byte。谢谢。

c file io char unsigned
3个回答
2
投票

如果你想读回,我不会用%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);
}

1
投票

你可以(也应该)用于传输fread() S和内存之间的原始内存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)的实际阅读过程。

© www.soinside.com 2019 - 2024. All rights reserved.