复制二进制文件时何时使用 int 与 char 作为缓冲区?
When to use int vs. char for buffers when copying binary files?
所以我得到了一个问题,说明如下:
写一个void函数将一个二进制文件复制到另一个文件中,一次100字节。该函数接收两个 FILE 指针(src 和 dest)作为参数。
我使用整数类型的数组编写解决方案,但我发现其他一些解决方案使用字符数组。在处理二进制文件时,是否有一个标准来了解何时使用整数数组与字符数组。
例如:
void copy(FILE *src, FILE *dest)
{
int buffer[SIZE];
int ret;
while((ret = fread(buffer, sizeof(int), 100, src)) > 0)
{
fwrite(buffer, sizeof(int), ret, dest);
}
return;
}
应该可以很好地复制,因为二进制文件显然只是由由 2 个整数 (0,1) 组成的位表示。为什么在复制二进制文件时需要使用字符数组?
除非有特殊要求,否则通常人们只使用char []
。实际上,像 fread()
、fwrite()
这样的 API 正在使用 char []
(实际上是 void *
)。
使用 int []
没问题(但有点奇怪)但是你的任务需要“一次 100 个字节”所以你应该 fread(buffer, sizeof(int), 100 / sizeof(int), src)
(如果文件大小不是 4[1] 的倍数,这不方便 。还要注意 这可能不起作用 如果 sizeof(int) == 8
.) 或 fread(buffer, 1, 100, src)
(那么你只是将 int []
用作 char []
)。
[1] 我想 sizeof(int) == 4
这是最常见的情况。
所以我得到了一个问题,说明如下:
写一个void函数将一个二进制文件复制到另一个文件中,一次100字节。该函数接收两个 FILE 指针(src 和 dest)作为参数。
我使用整数类型的数组编写解决方案,但我发现其他一些解决方案使用字符数组。在处理二进制文件时,是否有一个标准来了解何时使用整数数组与字符数组。
例如:
void copy(FILE *src, FILE *dest)
{
int buffer[SIZE];
int ret;
while((ret = fread(buffer, sizeof(int), 100, src)) > 0)
{
fwrite(buffer, sizeof(int), ret, dest);
}
return;
}
应该可以很好地复制,因为二进制文件显然只是由由 2 个整数 (0,1) 组成的位表示。为什么在复制二进制文件时需要使用字符数组?
除非有特殊要求,否则通常人们只使用
char []
。实际上,像fread()
、fwrite()
这样的 API 正在使用char []
(实际上是void *
)。使用
int []
没问题(但有点奇怪)但是你的任务需要“一次 100 个字节”所以你应该fread(buffer, sizeof(int), 100 / sizeof(int), src)
(如果文件大小不是 4[1] 的倍数,这不方便 。还要注意 这可能不起作用 如果sizeof(int) == 8
.) 或fread(buffer, 1, 100, src)
(那么你只是将int []
用作char []
)。
[1] 我想 sizeof(int) == 4
这是最常见的情况。