惠惠cos:洞穴惠勒变换(burrows-wheeler transform)

对于一个项目,我需要使用 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 文件,而它不与其他扩展一起工作。你知道为什么吗?另外,我是这个世界上的新手,所以请原谅我的愚蠢错误,这不是完整的代码。显然,这只是一个简单的实现,我没有避免后缀数组。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(181)
服务器超时和 sftp超时 怎么办(connection to server timed out apex)
上一篇
Crwmn牌号解释:门牌号的正则表达式(house number 1)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(54条)