编码,在文件中写入整数

时间:2019-05-17 19:37:24

标签: c huffman-code

我正在用C语言完成编码任务,直到读完符号并根据表格分配相应的代码为止,我一直做得很好。我必须串联多个代码,直到它们达到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 :(得分:0)

fputc用于将一个ASCII字符写入文件。

int fputc(int, FILE*) //此int在进入文件之前被转换为无符号(您的位可能在这里被弄乱了)

1-解决方案:以二进制模式打开该文件,然后使用fwrite进行写入

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

*由于大多数计算机上的整数都有32位(4字节),因此应该将整个32位一次写入二进制文件

2-解决方案:假设您无法在此函数内以二进制模式打开文件...您可以简单地使用usgin fprintf编写4个字符。

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

*注意:很难提供更多帮助,因为尚不清楚这些符号的本质是什么。 例如:二进制流,整数,ASCII,UTF等