Кодификация, записать целое число в файл - PullRequest
0 голосов
/ 17 мая 2019

Я делаю задачу по кодированию на языке Си, хорошо иду до части чтения символа и присваиваю соответствующий код согласно таблице. Я должен объединить несколько кодов, пока они не достигнут длины 32 бита, для этого я должен записать их в файл. Этот метод записи в файл доставляет мне много проблем, я пытаюсь сделать это с помощью функции fputc ().

Я не могу изменить объявление функции, потому что они запрашивают ее для домашней работы. Я создаю маску, чтобы можно было записать целое число в байтах, потому что они также предлагают учителей курса. Программа с этим кодом работает, но когда я вижу файл в двоичном средстве просмотра, он печатает только ноль. Есть идеи, что я делаю не так? Спасибо!

void write_int(FILE* fp, unsigned int buffer, int nbytes){
    if ( (nbytes <= sizeof(int)) && (nbytes>=0) ){ 
        unsigned int aux;
        int i;
        for (i=4; i>(4-nbytes) ; i--){
            aux = buffer & new_mask( ((i*8)-1),((i-1)*8)); 
            fputc(aux,fp)
        }
    fputc('\n',fp);
    }else{
        printf("nbytes out of range");
    }    
}

1 Ответ

0 голосов
/ 17 мая 2019

fputc используется для записи одного ASCII-символа в файл.

int fputc(int, FILE*) // этот int преобразуется в unsigned перед переходом в файл (ваши биты, вероятно, здесь запутались)

1- решение: откройте этот файл в двоичном режиме и запишите, используя fwrite

fp = fopen("filename", "wb+");
fwrite(buffer, 4, 1, fp);

*, поскольку целые числа на большинстве компьютеров имеют 32 бита (4 байта), это должно записать все ваши 32 бита за раз в двоичном файле

2- решение: Предполагая, что вы не можете открыть файл в двоичном режиме внутри этой функции ... вы можете просто написать 4chars usgin fprintf.

int fprintf(FILE*, format, ....);

* примечание: сложно чем-то помочь, потому что не ясно, какова природа этих символов. например: двоичный поток, целое число, ascii, utf и т. д.

...