存储方面的二进制文件和文本文件的区别?

时间:2011-10-18 05:12:19

标签: c text binary byte bits

我想问一些关于位和字节的问题,因为我很困惑。

  1. 例如,假设我有short int x = 345;。我知道短16位,所以当我在文件中写短文时,它写成char'3','4','5',每个包含1个字节,总共24位。 有没有办法将文件中的数字(短整数)写成16位的短整数?

  2. 我的概念是否正确?如果文件是二进制文件或以字节为单位的文本,写入文件的区别是什么?

2 个答案:

答案 0 :(得分:4)

是的,有办法。

uint16_t sh = 345;
fwrite(&sh, sizeof(sh), 1, fp);

如果您提到345被写为文本(例如ASCII,如果您使用的话)。在我发布的示例中,sh的二进制表示写入文件中,只需2个字节。

  

如果文件是,写入我的文件会有什么不同   二进制或文本的字节数?

  1. 文字写入(fprintf

    0000000: 00110011 00110100 00110101
                3        4        5
    
  2. 二进制写(fwrite

    0000000: 01011001 00000001
    #Little endian. Read as: 00000001 01011001 = 345
    
  3. 如果互操作性是一个问题(即你想将文件发送到另一台机器),文本格式是一个更好的选择,因为它是可移植的。

答案 1 :(得分:0)

如果将值写为字符串,则三个数字将占用至少三个字节;通常会有一个换行符或空格来标记值的结尾。

是的,您可以将值写为2个字节。一种方法是:

fwrite(&x, sizeof(x), 1, fp);

二进制文本和文本之间的区别在于,您可以在不同类型的计算机之间传输文本,几乎完全不受惩罚,并且所有计算机都将以相同的方式解释数据。二进制文件只能在具有相同字节序的机器上解释(big-endian或非Intel与little-endian或Intel)。在另一类机器上,您必须交换字节的顺序以正确解释二进制数据。