0

对于一个项目,我需要使用 bwt 对通用文件进行编码和解码。唯一的问题是我在编码不同于 txt 文件的文件时遇到问题。我真的不知道为什么,所以我希望你能帮助我,这里是代码:

int compare(const void *a, const void *b) {

    caratteri *ca = *(caratteri **) a;

    caratteri *cb = *(caratteri **) b;

    unsigned char *c1;

    unsigned char *c2;

    c1 = ca->first;

    c2 = cb->first;

    while (*c1 - *c2 == 0) {

        c1++;

        c2++;
    }

    return (*c1 - *c2);
}

caratteri **createStruct(unsigned char c[], caratteri car[], caratteri *ptr[], long size) {

    for (long i = 0; i < size; i++) {

        ptr[i] = &car[i];

        car[i].first = &c[i];

        car[i].last = &c[(size - 1 + i) % size];
    }

    return ptr;
}
caratteri **bwt(long size, FILE *file) {
    FILE *risultato;
    unsigned char *c = malloc(sizeof(unsigned char) * size);
    fread(c, sizeof(unsigned char), size, file);
    caratteri *car = malloc(sizeof(caratteri) * size);

    caratteri **pCaratteri = malloc(sizeof(caratteri *) * size);

    pCaratteri = createStruct(c, car, pCaratteri, size);

    qsort(pCaratteri, size, sizeof(pCaratteri), compare);

    risultato=fopen("risultato","wb");

    for(long i = 0; i < size; i++)

        fputc(*pCaratteri[i]->last,risultato);

    fclose(risultato);

    return pCaratteri;
}

主要课程是:

int main() {
    FILE *file;
    file = fopen("thumbnail.jpg","rb");
    if (file == NULL) {
        printf("Errore di apertura file!");
        exit(2);
    }
    fseek(file, SEEK_SET, SEEK_END);
    long size = ftell(file)+1;
    rewind(file);
    caratteri **car = bwt(size, file);
    FILE *risultato;
    decryptbwt(risultato);
    return 0;
}

同样,我不知道为什么,但编码和解码适用于 txt 文件,而它不适用于其他扩展。你知道为什么吗?另外,我是这个世界的新手,所以请原谅我的愚蠢错误,这不是完整的代码。显然,这只是一个简单的实现,我避免使用后缀数组。

4

0 回答 0