如何正确打印 JPEG 文件的字节? - CS50 PSET3 恢复
How can I properly print the bytes of a JPEG file? - CS50 PSET3 Recover
我正在尝试对包含多个 JPEG 的文件使用 fread 并将 JPEG 写入新文件,但在我这样做之前,我需要正确查看文件并根据 JPEG 的第一个字节查找 JPEG在下面代码底部的 if 语句中。
我无法进入 if 语句,并一直在尝试打印字节,但我 运行 遇到打印问题。
我只想打印缓冲区的 0 字节,但我的输出看起来像这样:
711151a6
cec117f0
7603c9a9
73599166
我是 C 的新手,很害怕,如有任何帮助,我们将不胜感激!
代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// Check for 2 arguments, the name of the program and the file being read
if (argc != 2)
{
printf("Usage: ./recover image\n");
return 1;
}
else
{
//Open the file
FILE * fp;
fp = fopen(argv[1], "r");
//Get file length
fseek(fp, 0, SEEK_END);
int f_length = ftell(fp);
fseek(fp, 0, SEEK_SET);
// If not file is found then exit
if(fp == NULL)
{
printf("File not found\n");
return 2;
}
// Allocate buffer for fread function
int *buffer = (int*)malloc(f_length);
if (buffer == NULL)
{
printf("Buffer is null\n");
return 1;
}
// Read thorugh the file
while(fread(buffer, 512, 1, fp) == 1)
{
for (int i = 0; i < 1; i++)
{
printf("%x\n", buffer[i]);
}
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
{
printf("Found a jpg\n");
}
}
// Exit the program
return 0;
}
}
int *buffer
不正确,因为目的是处理字节而不是整数。如果使用 int *
,那么例如 buffer[0]
将是前 4 个字节,而不是预期的第一个字节。将其更改为 unsigned char *buffer
。
明确地说,该行应该是以下内容(包括删除不必要的转换):
unsigned char *buffer = malloc(f_length);
我正在尝试对包含多个 JPEG 的文件使用 fread 并将 JPEG 写入新文件,但在我这样做之前,我需要正确查看文件并根据 JPEG 的第一个字节查找 JPEG在下面代码底部的 if 语句中。
我无法进入 if 语句,并一直在尝试打印字节,但我 运行 遇到打印问题。
我只想打印缓冲区的 0 字节,但我的输出看起来像这样: 711151a6 cec117f0 7603c9a9 73599166
我是 C 的新手,很害怕,如有任何帮助,我们将不胜感激!
代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// Check for 2 arguments, the name of the program and the file being read
if (argc != 2)
{
printf("Usage: ./recover image\n");
return 1;
}
else
{
//Open the file
FILE * fp;
fp = fopen(argv[1], "r");
//Get file length
fseek(fp, 0, SEEK_END);
int f_length = ftell(fp);
fseek(fp, 0, SEEK_SET);
// If not file is found then exit
if(fp == NULL)
{
printf("File not found\n");
return 2;
}
// Allocate buffer for fread function
int *buffer = (int*)malloc(f_length);
if (buffer == NULL)
{
printf("Buffer is null\n");
return 1;
}
// Read thorugh the file
while(fread(buffer, 512, 1, fp) == 1)
{
for (int i = 0; i < 1; i++)
{
printf("%x\n", buffer[i]);
}
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
{
printf("Found a jpg\n");
}
}
// Exit the program
return 0;
}
}
int *buffer
不正确,因为目的是处理字节而不是整数。如果使用 int *
,那么例如 buffer[0]
将是前 4 个字节,而不是预期的第一个字节。将其更改为 unsigned char *buffer
。
明确地说,该行应该是以下内容(包括删除不必要的转换):
unsigned char *buffer = malloc(f_length);