在二进制模式[8位或12位]中将字符保存到文件时,字符占用多少空间?
fprintf(f,"%ld",ch);
如果我保存很长[说5] 那么它需要多少空间3比特[101]或8比特
答案 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)表示,而不是二进制数。