将数据保存到二进制文件

时间:2013-03-07 13:19:15

标签: c types binaryfiles sizeof

在二进制模式[8位或12位]中将字符保存到文件时,字符占用多少空间?

fprintf(f,"%ld",ch);

如果我保存很长[说5] 那么它需要多少空间3比特[101]或8比特

3 个答案:

答案 0 :(得分:4)

fprintf(f,"%ld",...)

会将您的数字转换为十进制数字,并将log_10(ch)字节存储起来。 当您使用fwrite存储时,它将占用您指定的字节数。

fwrite (buffer , 1 , sizeof(buffer) , f )

另外注意,因为你永远不会将单个位存储到文件中,因为读写访问是按字节顺序的,因此总是8的倍数。

答案 1 :(得分:1)

您需要一个很好的帮助工具:sizeof Wiki article

引用:

  

在编程语言C和C ++中,一元运算符sizeof用于计算任何数据类型的大小,以表示类型所需的字节数来衡量。此上下文中的一个字节与unsigned char相同,并且可能大于8位,尽管这种情况并不常见。 sizeof的结果是它前面的表达式或带括号的类型说明符的类型的大小,并且具有无符号整数类型,通常用size_t表示。 sizeof可以应用于任何数据类型,包括基本类型,如整数和浮点类型,指针类型或复合数据类型(联合,结构或C ++类)。

所以基本上:如果你想知道某些东西将使用多少字节,只需使用 sizeof

注意但是:指针,以及其他实际上是指针的元素,但使用方式不同(如数组)只显示指针的大小(以字节为单位)。 ..不是指针指向的结构!存储指针的用途非常有限 - 下次您要使用的对象可能位于内存中的不同位置。

答案 2 :(得分:1)

它复制在您的平台上存储long所需的字节数(sizeof (long))。如果它只复制表示数字所需的位,则在读取数据时无法解释数据。

在您的代码中,您正在复制到字符串。因此,将存储字符(可能是ASCII)表示,而不是二进制数。