1

在 C 中,fread 函数是这样的:

size_t fread(void *buf, size_t max, FILE *file);

通常 char* 数组用作 buf。人们通常假设 char = 8 位。但如果不是真的呢?如果用 8 位字节系统编写的文件在 10 位字节系统上读取会发生什么?对于不同大小字节的系统之间的文件和网络流的可移植性,是否有任何单一标准?最重要的是,如何编写这方面的可移植代码?

4

2 回答 2

3

关于网络通信,物理访问协议(如以太网)定义了“信息单元”中有多少位,并由实现将其映射到适当的类型。因此,对于网络通信来说,支持奇怪的架构是没有问题的。

对于文件访问,如果您想支持奇怪的架构,事情会变得更有趣,因为没有可参考的标准,甚至将文件放在系统上的方法也可能会影响您访问它们的方式。幸运的是,目前使用的唯一不支持 8 位字节的系统是 DSP 和根本不支持文件系统的类似小型嵌入式系统,所以这个问题基本上没有实际意义。

于 2012-12-22T17:44:21.767 回答
1

如今,位大小不是 8 的系统非常罕见。但是也有其他大小的机器,文件不能保证可以移植到这些机器上。

如果需要超级可移植性,那么您必须在文件中使用某种编码来处理 char != 8 位。

你有没有想过这可能必须在 DEC 10 或真正旧的 IBM 大型机、DSP 或类似的主机上运行,​​或者你只是为了“我想知道”的目的而询问。如果是后者,我只会“忽略此案”。这是非常特殊的机器,没有 8 位字符 - 你很可能会遇到其他问题,而不是每个字符的位数,然后才能在系统上使用你的“文件” - 比如如何首先在那里获取文件,因为您可能无法插入 USB 记忆棒或使用 FTP 传输它(尽管后者可能是最有可能的)

于 2012-12-22T16:36:57.180 回答