我是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()函数。

10-04 18:34