以下代码将unsigned char数组(定义为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
。感谢。
答案 0 :(得分: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 :(得分:2)
如果你想阅读它,我不会用%u
来写出来。 %u
将是可变宽度输出,因此1代表一个字符,12
代表两个,等等。当您阅读它并查看112
时,您不会知道这三个字符(1,1,2),或两个(11,2;或1,12)或只是一个(112)。如果需要ASCII文件,则可以使用固定宽度输出,例如%03u。这样每个字节总是3个字符。然后,您可以使用fscanf("%03u", buffer[i])
一次读取一个字节。
答案 2 :(得分:1)
您可以(并且应该)使用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)
跳回到实际阅读过程的开头。