【发布时间】:2017-11-27 07:39:52
【问题描述】:
我有一个整数值从 0 到 511(最大 9 位)的数组。我正在尝试将其写入带有fwrite 的文件。
以数组为例:
[257, 258, 259]
Which is 100000001, 100000010, 100000011
I am trying to write
100000001100000010100000011 + extra padding of 0s to the file
但由于 fwrite 一次限制写入 1 个字节,我不知道该怎么做。我是按位运算的新手,不知道如何分离各个字节。
【问题讨论】:
-
与Writing integer values to a file in binary using C 密切相关——通过相同的 OP 以及大约 9 位值。
-
除非您使用一些极不寻常的硬件,否则没有可用的 9 位数据类型。您必须将每个“9 位”值存储在内存和磁盘中的 16 位数据中。我想,理论上你可以在一个 32 位单元中存储 3 x 9 位值。目前,尚不清楚您在追求什么或为什么。如果您正在使用 36 位硬件,请这样说;规则突然改变。曾经有这样的机器;我不认为还有很多人还在运行,但你可能会教育我。
-
@JonathanLeffler 前一个 Q 更笼统,在这个 OP 中特别要求一种方法/算法以最佳方式将 n x 9 位写入 (n x 9)/8+1 字节。如果发布了一个解决方案,我们就可以把它塞进之前的 Q 中。
-
如果值的范围是 257-512,只需从该值中减去 257 并保存 8 位数量 (0..255)。这将为您省去无尽的头痛。在阅读时,再次添加 257。您将拥有 16 位量,将其映射到一系列 8 位值,并且您将读取一个 8 位值数组并将它们扩展回 16 位量。
-
玩得开心。我认为即使是虐待狂的老师也不会试图让你使用 9 位数据存储。在计算大小的 2 次方世界中,它根本无法正常工作。
标签: c io bit-manipulation bitwise-operators fwrite