fread和endianness:fread(指针,sizeof(某些),1,文件指针)有相同的结果吗?

时间:2015-04-15 21:20:36

标签: c io endianness

假设我有:

FILE* fp = fopen("myfile.bin", "r");
char something[30];
fread(something,sizeof(char)*30,1,fp);

对于fread(某事,sizeof(char),30,fp),endianness很重要,但对于上面的代码,endianness是否重要?

2 个答案:

答案 0 :(得分:1)

  

对于fread(某事,sizeof(char),30,fp),endianness很重要,但对于   上面的代码,字节序是否重要?

为什么你认为这两个片段在字节序方面有所不同?对我来说,他们都读取30个字节的数据 - 尽管略有不同,一个在参数中指定读取一个大小为30的元素而另一个元素指定它反过来。

但到目前为止,你刚刚读了一些字节数。现在你如何解释这些字节是字节序可能出现的地方。阅读有关字节序的更多信息:here。那么它取决于你是否只读了一些ASCII文本字节顺序可能不适用,如果你读取以二进制方式写的整数,那么字节顺序可能会受到关注。

ps您还可以在rb

中指定fopen

答案 1 :(得分:0)

在读入char数组时,Endianess对于这两种情况都无关紧要。对于endianess重要的情况,如何指定总大小无关紧要。

fread()同时采用{​​{1}}和size参数,这更像是一个历史工件。您可能会看到的唯一区别在于返回值,即nmemb单位的计数。

请原谅自插件,但您可以在this answer中找到glibc的一些源代码分析。它的要点是sizesize简单地相乘,其中的分隔值仅用于计算返回值。