Отделять каждый символ ascii при сохранении его в файл

#c #compression #txt

#c #сжатие #txt

Вопрос:

Итак, я хочу сохранить символы ascii в текстовый файл или что-то подобное, это просто метод сжатия, который я хочу использовать для экономии места, чтобы для каждого символа не было разделителей, но дело в том, что он превращается во что-то другое с другой кодировкой в ascii

[Вот как это выглядит с пробелами. Это то, что я хочу, чтобы произошло, за исключением пробелов][1]

[И вот как это выглядит без пробелов][2]

это функция, которая пытается его распаковать

     int i, j=0, k=0, ch, finaldec=0;
    char temp[8], finalcode[1000], tempc;

    for (i=count; i>=0; i--){
        j  ;
        temp[j]=huffmanCode[i];
        if (temp[j]=='1'){
            finaldec =pow(2, j);

        }
        if (j==7){
            finalcode[k]=finaldec;
            printf("%c ", finalcode[k]);
            finaldec=0;
            k  ;
            j=0;
        }
    }
    FILE *ff;
    ff = fopen("text_compress.txt", "w ");
    for (i=0; i<k; i  )
        fprintf(ff, "%c ", finalcode[i]);
    fclose(ff);
}
 

Что делает эта функция, так это то, что она просто принимает последовательность из 1 и 0, затем в каждом байте она преобразует его в символ ascii

Что я должен сделать, чтобы правильно сохранить ASCII-код? используйте другое расширение файла или есть какой-то невидимый разделитель, например »? [1]: https://i.stack.imgur.com/w3gKI.png [2]: https://i.stack.imgur.com/n8W3e.png

Ответ №1:

Похоже, содержимое finalcode недопустимых символов ASCII. Блокнот, вероятно, интерпретирует некоторые из этих байтов как символы в кодировке UTF, и, есть ли у вас пробелы или нет, скорее всего, просто меняет эту интерпретацию.

Если вы ожидаете, что на выходе будет какой-то допустимый текст ASCII, то, похоже, вероятно, есть какая-то проблема с вашей функцией сжатия или распаковки (хотя трудно знать наверняка, не видя, как HuffmanCode заполняется).

Комментарии:

1. Если я сделаю это i.stack.imgur.com/w3gKI.png и отрегулируйте соответственно, сжатие и распаковка работают нормально, но размер сжатого файла будет больше, чем размер распакованного, поэтому мне как-то нужно удалить пробелы между ними, и у меня нет никакой другой идеи, кроме преобразования байта в десятичное число в ascii