我是C语言的新手,我面临的问题是我有一个二进制文件被解压(即以某种格式解压)。。
我要做的是把它打包,然后再把它拆开,看看它是否与原来的拆开版本相同。
有件事值得一提:我被告知打包(即转换为打包)和解包(即转换为解包)功能工作良好。。只是想自己确认一下,学点C。。。
我有两点我认为我做错了
1:我看文件的方式
2:我没有考虑打包和解包的变量类型(即对于打包,它是unsigned char*而对于解包,它是short*)
int main(void) {
FILE *fp;
unsigned char* packed ;
short* unpacked;
size_t result;
int fileSize;
fp = fopen(FILENAME, "rb");
fseek (fp , 0 , SEEK_END);
fileSize = ftell (fp);
rewind (fp);
unpacked = (short*) malloc (sizeof(char)*fileSize);
result = fread(unpacked,1,fileSize,fp);
short *originalUnpacked = unpacked;
convert_to_packed(&unpacked, &packed);
convert_to_unpacked(&unpacked, &packed);
if (originalUnpacked == unpacked)
{
puts ("Thats it !!");
}
fclose(fp );
return EXIT_SUCCESS;
}
最佳答案
这个密码坏了。
当您应该比较内存时,您正在比较指针(originalUnpacked == unpacked
)。为什么你要混合short *
和unsigned char *
指针?如果数据是二进制“blob”,则可能只应使用后者。
要比较内存,请使用标准memcmp()
函数。