【发布时间】:2015-07-26 11:16:04
【问题描述】:
我正在研究 Java 中的隐写术程序。但我得到的建议是我能够在 C 程序中更好地解决这个任务。我想尝试一下,但我在 C 编程方面很糟糕。现在我想读取一个gif 文件并找到用作图像分隔符的字节(0x2c 来自GIF format)。
我试着写这个程序:
int main(int argc, char *argv[])
{
FILE *fileptr;
char *buffer;
long filelen = 0;
fileptr = fopen("D:/test.gif", "rb"); // Open the file in binary mode
fseek(fileptr, 0, SEEK_END); // Jump to the end of the file
filelen = ftell(fileptr); // Get the current byte offset in the file
rewind(fileptr); // Jump back to the beginning of the file
buffer = (char *)malloc((filelen+1)*sizeof(char)); // Enough memory for file + \0
fread(buffer, filelen, 1, fileptr); // Read in the entire file
fclose(fileptr); // Close the file
int i = 0;
for(i = 0; buffer[ i ]; i++)
{
if(buffer[i] == 0x2c)
{
printf("Next image");
}
}
return 0;
}
有人可以给我建议如何修复我的循环吗?
【问题讨论】:
-
您看到的问题是什么。
0x2C或0x00也可以是图像中的数据字节。 -
你的循环是怎么坏的?事实上,它会在第一次
buffer[i]为零时退出;这就是你想要的吗? -
你可以用
for(i = 0; i<filelen; i++) -
@Politank-Z 在我发布的链接中写道,
0x2c是用作图像分隔符的字节。我如何识别它是图像分隔符还是普通字节? -
我不明白 - 您已经在循环内测试
buffer[i] == 0x2c。从您所说的来看,这似乎是您区分图像分隔符和普通字节的方式。
标签: c steganography