【问题标题】:What's a binary file and how do I create one?什么是二进制文件,如何创建?
【发布时间】:2009-06-11 07:39:01
【问题描述】:

我想创建一个表示整数的二进制文件。我认为该文件应该是 4 个字节。我使用Linux。怎么做? 另一个问题:如何将该文件的内容分配给 C 中的整数?

【问题讨论】:

    标签: c linux binaryfiles


    【解决方案1】:

    在标准 C 中,fopen() 允许模式 "wb" 以二进制模式写入(和 "rb" 读取),因此:

    #include <stdio.h>
    
    int main() {
        /* Create the file */
        int x = 1;
        FILE *fh = fopen ("file.bin", "wb");
        if (fh != NULL) {
            fwrite (&x, sizeof (x), 1, fh);
            fclose (fh);
        }
    
        /* Read the file back in */
        x = 7;
        fh = fopen ("file.bin", "rb");
        if (fh != NULL) {
            fread (&x, sizeof (x), 1, fh);
            fclose (fh);
        }
    
        /* Check that it worked */
        printf ("Value is: %d\n", x);
    
        return 0;
    }
    

    这个输出:

    Value is: 1
    

    【讨论】:

    • 记住这一点(通过 man fopen):模式字符串还可以包含字母 'b' 作为最后一个字符或作为描述的任何两个字符串中的字符之间的字符多于。这完全是为了与 C8​​9 兼容,没有任何效果; 'b' 在所有符合 POSIX 的系统上都被忽略,包括 Linux。 (其他系统可能会以不同的方式处理文本文件和二进制文件,如果您对二进制文件执行 I/O 并期望您的程序可以移植到非 Unix 环境,则添加“b”可能是个好主意。)跨度>
    • float 使用这个:stackoverflow.com/a/4465303
    【解决方案2】:

    从操作系统的角度来看,所有文件都是二进制文件。 C(和 C++)提供了一种特殊的“文本模式”,可以将换行符扩展为换行符/回车符对(在 Windows 上),但操作系统不知道这一点。

    在 C 程序中,要创建没有这种特殊处理的文件,请使用 fopen() 的“b”标志:

    FILE * f = fopen("somefile", "wb" );
    

    【讨论】:

      【解决方案3】:

      打开文件进行二进制读/写。 fopen 为文件访问模式参数使用b 开关 - see here

      请参阅fopen page in Wikipedia 了解文本文件和二进制文件之间的区别以及将数据写入二进制文件的代码示例

      【讨论】:

        【解决方案4】:

        有关系统调用openwriteread,请参阅man

        【讨论】:

          猜你喜欢
          • 2020-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-25
          • 1970-01-01
          相关资源
          最近更新 更多