假设我有:
FILE* fp = fopen("myfile.bin", "r");
char something[30];
fread(something,sizeof(char)*30,1,fp);
对于fread(某事,sizeof(char),30,fp),endianness很重要,但对于上面的代码,endianness是否重要?
答案 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的一些源代码分析。它的要点是size
和size
简单地相乘,其中的分隔值仅用于计算返回值。