【发布时间】:2020-06-29 10:35:46
【问题描述】:
这是我的代码
typedef int8_t BYTE;
# define BLOCK_SIZE 512
# define file_name_size 8
bool new_jpeg(BYTE buffer[]);
int main(int argc, char *argv[])
{
if (argc !=2)
{
printf("Wrong must be recover image\n");
return 1;
}
FILE* infile = fopen(argv[1], "r");
if (infile == NULL)
{
printf("File not found\n");
return 1;
}
BYTE buffer[BLOCK_SIZE];
int file_index = 0;
bool foud_first_jpeg = false;
FILE* outfile;
while (fread(buffer,BLOCK_SIZE,1,infile))
{
if(new_jpeg(buffer))
{
if(!foud_first_jpeg)
foud_first_jpeg = true;
else
fclose(outfile);
char filename[file_name_size];
sprintf(filename, "%03i.jpg", file_index++);
outfile = fopen(filename, "w");
if(outfile ==NULL)
return 1;
fwrite(buffer, BLOCK_SIZE,1,outfile);
}
else if (foud_first_jpeg)
{
fwrite(buffer, BLOCK_SIZE,1,outfile);
}
}
fclose(outfile);
fclose(infile);
}
bool new_jpeg(BYTE buffer[])
{
return buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0;
}
似乎我在最后一行有错误。 错误是: 错误:常量 255 与“BYTE”类型(又名“有符号字符”)表达式的比较结果始终为假 [-Werror,-Wtautological-constant-out-of-range-compare]
我知道这是我定义 BYTE 的方式,但解决方案是什么?
谢谢
【问题讨论】:
-
BYTE是有符号类型的原因是什么?这有点不寻常。 -
在比较行使用转换为
uint8_t或使用十进制负数而不是十六进制负数 (0xff ==> -128) -
尝试使用负 8 位等值的常量,例如-1 而不是 0xff。
-
只要把typedef改成
typedef uint8_t BYTE;。
标签: c