0

以二进制模式 [8 位或 12 位] 将字符保存到文件时需要多少空间?

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

另外,如果我保存很长 [say 5] 那么需要多少空间 3bits [101] 或 8bits [00000101]

4

3 回答 3

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

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

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

另请注意,您永远不会将单个位存储到文件中,因为读写访问是按字节计算的,因此始终是 8 的倍数。

于 2013-03-07T13:30:16.637 回答
1

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

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

于 2013-03-07T13:23:29.870 回答
1

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

引用:

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

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

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

于 2013-03-07T13:22:23.347 回答