编码,将一个整数写入文件中

标签 c huffman-code

我正在用C语言做一个编码任务,我进展顺利,直到读取符号并根据表格分配相应的代码的部分。我必须连接几个代码,直到它们的长度达到 32 位,为此我必须将它们写入一个文件中。 这种写入文件的方法给我带来了很多问题,我尝试使用 fputc() 函数来实现。

我无法更改函数的声明,因为他们要求它作为作业。 我创建了一个掩码以便能够按字节写入整数,因为他们也建议类(class)的老师这样做。 使用该代码的程序可以工作,但是当我使用二进制查看器查看该文件时,它只打印零。 知道我做错了什么吗? 谢谢!

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");
    }    
}

最佳答案

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

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

1-解决方案:以二进制方式打开此文件并使用fwrite写入

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

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

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

int fprintf(FILE*, 格式, ....);

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

关于编码,将一个整数写入文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192596/

相关文章:

objective-c - 将 32 位结构传递给 32 位整数函数参数

c++ - 如何快速解码霍夫曼码?

c - fprintf(long) 写入 8 个字节,而 fscanf(long) 读取 6 个字节,为什么?

c - C语言快速排序

c++ - IP 头位顺序不清楚

Matlab,图像压缩

python - 是否可以使用 '0' 和 '1' 字符构建霍夫曼算法?

haskell - 解码霍夫曼树时出现非详尽模式错误?

c - 数组的POD结构

c - CLOCK_REALTIME有什么用?