下面的代码将无符号的字符(定义为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])
一次读取。
我如何读取该文件从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);
}
你可以(也应该)用于传输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)
的实际阅读过程。